04. januar 2002 - 15:40Der er
43 kommentarer og 3 løsninger
Placere movieclip etc. Vol. 2.
Hey :)
Jeg er ved at lave min egen hjemmeside og på den er der kun 4 knapper. Underknapperne er der en lille \"indikator-klods\" som bevæger sig hen under den knap man lige har trykket på og der åbnes et nyt dokument i et frameset.
Problemet er denher \"indikator-klods\". Jeg har regnet ud at jeg skal animere i alt 24 variationer af denher klods der bevæger sig fra knap til knap - alt efter hvilken n´knap den skal gå til i forhold til dens udgangspunkt. Nu er min lille flashfilm blevet totalt rodet og lortet dur\' ikke..
Men jeg har en idé..
SPØRGSMÅLET:
Jeg kunne godt tænke mig et script, som, når man trykker på en knap, vil det bede \"indikator-klodsen\" (som er et movieklip) om at flytte sig til et bestemt punkt på skærmen (relativ til flashfilmens dimensioner) uanset dens udgangspunkt. På denne måde behøver jeg ikke at bekymre mig om selv at animere animere det hele selv..
Hvordan gør man?
David -
PS. Lidt kode som måske vil hjælpe..
onClipEvent(load) { antal_frames = 10; // hvor mange frames skal animationen bruge ?
Der bliver investeret massivt i AI. Teknologien er mere tilgængelig end nogensinde, og ambitionerne er høje. Alligevel oplever mange virksomheder, at resultaterne udebliver.
Altså.. Jeg kunne godt tænke mig at denne funktion ligger i en knap, så det er knappen der beder movieklippet om at bevæge sig og ikke movieklippet selv når bliver afspillet..
Men egentlig kunne jeg allermest tænke mig en løsning som jeg bad om, hvor scriptet ligger i selv knappen og beder movieklippet om at udføre en kommando, da det sikkert vil være nemmere at tilføje en ny knap senere hen.. :)
Nej, hvor er jeg misundelig på hvad man kan præstere som grafikker :) Dine animationer virker for det meste. Har jeg forstået dig ret hvis jeg antager at du vil reproducere samme funktionalitet, blot via actionScript fra knapperne i stedet ? Så har jeg en løsning som nemt kan implementeres.
Lad mig lige tjekke dit link igen så jeg kan se om vi kan undgå at skulle lave knapperne om til mc\'er...
//////////////////////////////// action til din indikator MC /////////////////// onClipEvent(load) { antal_frames = 10; // hvor mange frames skal animationen bruge ? _root.slider = this; // opret en reference til dette clip target_x = _x; // sæt start værdier step_x = 0; }
function setTarget_x(new_destination) { diff_x = target_x - this._x; if (diff_x != 0) { // sæt ny destination target_x = new_destination; step_x = (target_x - this._x)/antal_frames; } }
function move2Target() { if (target_x != this._x) { //find ud af hvor tæt vi er på målet diff_x = target_x - this._x; if ((Math.abs(diff_x) <= (Math.abs(step_x)) { new_x = target_x ; } else { new_x = this._x + step_x; }
this._x = new_x; } }
onClipEvent(enterFrame) { move2Target(); }
//////////////////////////////// slut af action til din indikator MC ///////////////////
Vi kan nok ikke undgå at dine knapper skal pakkes ind som mc\'er hvis vi skal have fleksibilitet i antal knapper og film størrelse, men actionerne er til gengæld ens for alle knapper
1) tilføj denne linje i din (press) eller (release) action på knappen
on (release) { _root.slider.setTarget_x( this._x); //send ny destination til indikator mc }
2) pak knapperne ind som movieClips og placer dem på stage
Så skulle den gerne være på plads, men jeg har ikke testet det da jeg ikke har Flash på denne maskine
Oh, det er kryptisk! Men har jeg forstået det rigtigt, at det eneste jeg egentlig skal ændre på æh.. igenting? Fantastisk, det ser jeg lige.. (Har jeg ikke ret i at det eneste jeg egentlig kan rette i er antal frames (som jeg i forvejen har sat til 10?) Næ, jeg skal sætte startværdien ser jeg nu. Og så skrive destinationsværdien i knappen.. Undskyld, jeg tænker lige højt.. :)
Geo, hvis nu jeg gerne vil have at bevægelsen skal ease-ud?
Target_x er vist både startværdi og targetværdi? Med startværdi, mener du så den værdi den starter med helt fra begyndelsen, hvor man kommer ind på hjemmesiden? (I dette tilfælde under knappen \"forside\")
Du tænker for meget ;) Du behøver kun at erstatte actionen på din indikator mc med actionen for oven Easing laver vi senere når vi har fået dette til at virke og jeg har adgang til flash
Knapperne pakkes hver for sig som et mc når du har tilføjet
on (release) { _root.slider.setTarget_x( this._x); //send ny destination til indikator mc } på knapperne
Nu har jeg gjort som du siger jeg skal gøre. Lavet fire knapper og har givet dem følgende action:
on (release) { _root.slider.setTarget_x( this._x = 284,4); //send ny destination til indikator mc } -hvor 284,4 er en individuel værdi på hver knap. Derefter har jeg pakket knapperne ind i hver deres eget MC
Så har jeg lavet et MC og kaldt det for \"slider\" og har sat den action på du har lavet.
Der sker ingen al verdens ting - jo, to af knapperne rykker sig en lille my fra hinanden, de andre gør ikke. Indikatoren står bare og glor.
www.faktaomvold.org >> jo jeg sender også en demo til dig. david78>> er det ok at jeg sender din redigerede fil til www.faktaomvold.org eller skal jeg oprette en anden demo fil ?
onClipEvent (load) { antal_frames = 10; // hvor mange frames skal animationen bruge ? _root.slider = this; // opret en reference til dette clip target_x = _x; // sæt start værdier step_x = 0; function setTarget_x (new_destination) { diff_x = new_destination-target_x; //DENNE LINJE VAR FØR FORKERT if (diff_x != 0) { // sæt ny destination target_x = new_destination; step_x = (target_x-this._x)/antal_frames; } } function move2Target () { if (target_x != this._x) { // find ud af hvor tæt vi er på målet diff_x = target_x-this._x; if (Math.abs(diff_x)<=Math.abs(step_x)) { new_x = target_x; } else { new_x = this._x+step_x; } this._x = new_x; } } } onClipEvent (enterFrame) { move2Target(); }
Skal der være easing, tror jeg nok, at det følgende vil skabe den ønskede effekt:
onClipEvent (load) { _root.slider = this; // opret en reference til dette clip target_x = _x; // sæt start værdier function setTarget_x (new_destination) { diff_x = new_destination-target_x; //DENNE LINJE VAR FØR FORKERT if (diff_x != 0) { // sæt ny destination target_x = new_destination; } function move2Target () { if (target_x != this._x) { // find ud af hvor tæt vi er på målet diff_x = target_x-this._x; if (Math.abs(diff_x)<=1) { new_x = target_x; } else { new_x = this._x+diff_x*0.4; } this._x = new_x; } } } onClipEvent (enterFrame) { move2Target(); }
Jeg har fjernet styringen med antal frames, som animationen forløber over... I stedet gør den blot det, at den flytter slideren 40% af afstanden hen til målet... Egentlig vil dette fortsætte i det uendelige, men jeg har sat en stopper ved en afstand på 1 pixel, som snapper til slutpositionen...
Kører den for langsomt eller hurtigt, kan du henholdsvis hæve og sænke koefficienten \"0.4\"... Kører den for længe og for kort kan du hæve eller sænke snapværdien \"1\".
Easing-out værdi 100 havde jeg i tankerne.. Barklund, det er givetvis meget meget smart den omskrivning du har lavet, men jeg må indrømme at nu begynder min hjerne at gøre ondt.. ;) Jeg er stor tilhænger af at tingene generelt bør være til at forstå sådan med rimelig lethed.. Din omskrivning gør det kæmpe-kompliceret. Alle de ord jeg trods alt kan forholde mig til med min lille Actionscript-forståelse (såsom frame/sek. og easing parameter osv.) er helt væk.. Jeg er fuldstændig lost..
Jeg har før set en easingparameter i et tidligere spørgsmål jeg har stillet.. Jeg kan bare slet ikke regne ud hvor den skal puttes ind henne i dette script.. (Men skal det ikke ligge omkring step_x parameteren? (Gætter..))
Jeg kender ikke Flash\'s interne brug af easing-parametren - altså hvordan tallet fra -100 til 1000 omsættes til easing... Skal det forstås 100 %, så prøv at implementer det ovenstående og eksperimenter med \"easing-værdien\", 0.4, samt snap-værdien, 1.
Jeg kan godt prøve at implementere det 100% som flash selv bruger easing, men det er lidt tungt... Er det påkrævet?
Æhm, tungt? Mener du at det vil få filen til at blive afviklet langsommere?
Flash har en easing parameter der løber fra -100 til 100. Jeg må indrømme at jeg ikke er helt klar over hvad disse tal egentlig dækker over..
Grunden til at jeg kunne tænke mig at få er forståelig easingparameter er egentlig lidt for min egen forståelses skyld. Jeg er i fuld sving med at forsøge på at lærer Actionscripting her, og det gør det altså lettere for mig at kunne referer til nogle simple værdier der er til at begribe. :)
Måske, Geo véd hvad easingparameteren egentlig dækker over.. ?
I dette eksempel (samme resultat som før), kan easing- og snap_value-værdierne sættes øverst...
Deres betydning er enkel. Når slideren skal flytte sig, beregnes afstanden fra det nuværende punkt hen til slutpunktet. Er denne afstand mindre end snap_value, hopper slideren til slutværdien og stopper. Er afstanden større en snap_value, bevæger slideren sig en brøkdel af afstanden til slutværdien svarende til easing. Altså hvis easing er 0, så står slideren hele tiden stille. Hvis easing er 1, så flytter slideren sig til slutværdien øjeblikkeligt. Så simpelt er det... Jeg gættede så ud i luften på, at easing = 0.4 ville give et pænt resultat...
Det er jo genialt, Barklund.. Det må være tungt at bærer rundt på en sådan en stor hjerne.. :) Eller du har den måske i et 500 l. akvarium ved siden af? ;)
Det virker helt som det skal. Jeg forstår det bare ikke helt, og det ville jeg så gerne..
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.