Avatar billede davidchristensen Praktikant
06. marts 2002 - 15:34 Der er 20 kommentarer og
2 løsninger

Placere Moviclip Vol. IV

Fortsættelse fra http://www.eksperten.dk/spm/167088

Jeg har fået et lille script man kan sætte på en frame i et movieclip, så når man trykker på en knap, så bliver denne frameafspillet og MC'et bevæger sig til en ny position med en easingparameter. Nice job, Ditlev ;)

Men jeg kunne nu godt tænke mig en ekstra parameter, nemlig at kunne bestemme, at denne bevægelse skal forgå over eks. 10 frames, uanset hvor lang vej MC'et har til sin destination.

Jeg har nemlig sat Ditlev's script på et stort (meget stort) MC, som så skulle ændre placering, men det går alt alt for langsomt..

Hvad er det for en hastighed Flash bruger som sin default hastighed..? Jeg kan i Ditlevs script ikke se noget med distance/tid deffineret, derfor må der her vel refereres til enelleranden default hastighed? Men det er måske også bare mig der er underbegavet.. ;)

David
-
Avatar billede nikolajdu Nybegynder
06. marts 2002 - 16:36 #1
Du er nok underbegavet ;-)

- Tiden det tager at flytte et movieClip uden angivelse af tid - Må nødvendigsvis være afhængig af hvilke framerate du kører.

Du kan jo så selv regne ud at hvis du kører 12fps, så skal dit clip scriptes til at vare 10/12 = 0.83 sekunder :))

Skal desværre gå nu, men er der intet svar imorgen kigger vi på det :)

/Nikolaj
Avatar billede gotcha Nybegynder
06. marts 2002 - 20:41 #2
Du har desværre ikke angivet, hvordan hans algoritme ser ud, men jeg går ud fra, at den blot flytter dit movie clip en brøkdel af afstanden (denne metode er den mest anvendte og brugt et utal af gange!). Vandret ser den formentlig sådan ud:

_x += (targetX-_x)/20;

Den er meget nem at anvende, men desværre mangler den fleksibilitet (f.eks. kan du ikke angive et tidsparameter, og desuden er bevægelsen set så mange gange, at den bliver ret triviel). Derfor har Robert Penner udviklet nogle ligninger, der tager højde for dette. Du kan finde ligningerne på http://www.robertpenner.com/scripts/easing_equations.txt og se en anvendelse af dem på http://www.were-here.com/forums/showthread.php?s=5223d6211ef76e9b7b9e01242fee04bc&threadid=87583 .

Jeg håber, det hjælper :)

Mvh Morten
Avatar billede davidchristensen Praktikant
06. marts 2002 - 22:25 #3
Hey :)

Jeg har sgu glemt scriptet. Damn it. Nu har jeg ikke længere internetforbindelse derhjemme, så nu sidder jeg på Københavns billigeste (og mest snavsede) internetcafé i Valby - og så har jeg sgu glemt disketten!

Nå, men. Ja, jeg er sgu underbegavet, Nikolaj ;)

Gotcha: Det er netop sådan en algoritme der er brugt i mit script. Det ser ud i stil med

_y=232
_x=758
_vel=10
_x += (targetX-_x)/_vel
_y += (targetX-_x)/_vel

..og så er der så to linier til jeg ikke kan huske i hovedet..

Ihvertfald, så søger jeg nu et script, som egentlig fungere på samme måde, men hvor der er deffineret et tidsinterval også. Jeg kan nemlig se (umiddelbart) at hastigheden må være proportional med den afstand som MC'et har til sit target, og det dur' ik'.

Desuden, Gotha, tak for dit link. Der er noget at begrave sig I. :)

Nikloaj, vi skal snart ha' en kasse øl :), men det vil være helt fantastisk hvis du kunne kringle et script til mig.. :) (Er desværre ikke god nok til endnu at lave det selv..)

David
-
Avatar billede davidchristensen Praktikant
06. marts 2002 - 22:27 #4
..Desuden, Nikolaj, så måtte jeg vente noget nær 38 sekunder, før mit MC havde flyttet sig ca. 1000 pixels.. Desværre ikke kun 0.38 sek..
Avatar billede gotcha Nybegynder
06. marts 2002 - 23:30 #5
Uden at gå i detaljer med begrundelserne for ligningerne, så kan du finde et meget simpelt eksempel på http://www.hhbk.subnet.dk/easeInQuad.fla .

Det eneste eksemplet gør, er at flytte dit movie clip (jeg har givet det navnet clip) 100 pixels til højre for dets nuværende position, og dette varer nøjagtig 12 frames!

Når movie clippet hentes defineres et par konstanter såsom antallet af frames, destinationen og en variabel t til at holde styr på tiden. Vi kontrollerer så blot, om der endnu ikke er blevet afspillet 12 frames, og i så fald flytter vi ganske enkelt vores movie clip vha. den funktion, der er defineret på hovedtidslinien (sædvanligvis placerer jeg alle mine prototyper der).

Det burde være ret nemt at modificere til dine behov :)

Mvh Morten
Avatar billede gotcha Nybegynder
06. marts 2002 - 23:40 #6
Hvis du absolut skal have tidsparametret i sekunder, så kan du erstatte koden vedhæftet til clip med følgende (her tager det 12 sekunder at bevæge sig de 100 pixels):

onClipEvent (load) {
    var start = this._x;
    var end = this._x + 100;
    var duration = 12;
    var t = 0;
    var b = getTimer();
}

onClipEvent (enterFrame) {
    t = (getTimer()-b)/1000;
    if (t <= duration) {
        this._x = Math.easeInQuad(t, start, end, duration);
    }
}

:)
Avatar billede davidchristensen Praktikant
07. marts 2002 - 17:40 #7
Morten, jeg har problemer med at downloade din .FLA-fil..:)

Men jeg må lige spørge:

onClipEvent (load) {
    var start = this._x; //Er dether start punktet for _x? Er det nødvendigt?
    var end = this._x + 100;// Hvorfor ligger slutpunktet 100 px. væk?
    var duration = 12; //12 sekunder, okay.. Kan man bruge decimaltral?
    var t = 0; // Hvad kan jeg indstille her?
    var b = getTimer();
}

onClipEvent (enterFrame) {
    t = (getTimer()-b)/1000;
    if (t <= duration) {
        this._x = Math.easeInQuad(t, start, end, duration);
    }
}

KAn jeg ændre på easing parameteren nogen steder her? :)

DAvid
-
Avatar billede gotcha Nybegynder
07. marts 2002 - 17:50 #8
Der er de 4 parametre, fordi funktionen ganske enkelt tager 4 parametre :)

Variablen start kan selvfølgelig være alt muligt, men her har jeg bare valgt den nuværende x-position. Du kan sagtens placere den f.eks. x = 230 og så sige, at den skal slutte i x = 50.

Variablen duration er bare for lang tid, der skal gå, og det kan sagtens være et decimaltal. Hvis du kigger på udtrykket t = (getTimer()-b)/1000, så måles den forløbne tid med tre decimaler (getTimer er i millisekunder, og derfor skal der divideres med 1000 for at konvertere til sekunder). Vi sætter her t=0 for at definere et starttidspunkt (hvis du vil bruge frames skal du erstatte t = (getTimer()-b)/1000 med t++), men det er i denne sammenhæng egentlig ikke nødvendigt, da værdien ikke bruges til at beregne t i enterFrame.

Mvh Morten
Avatar billede davidchristensen Praktikant
07. marts 2002 - 21:56 #9
Okay, Morten. Et grundigt svar; tak! :)

Nu afprøver jeg det lige - jeg har det med at være lidt kræsen mht. scripts, men umiddelbart ser det jo fint ud dether :)

Vender flux tilbage..

David
-
Avatar billede davidchristensen Praktikant
08. marts 2002 - 16:46 #10
Se, jeg kan ikke få det til at fungere..

Desuden er der lige nogle ting:

1 Der skal jo også være en _y faktor
2 Positionen er relativ i forhold til den position hvorfra MC'et sidst findes - det dur' ikke. Den skal altså være abslout, da jeg ellers skal lave alt for mange kombinationsmuligheder..

Jeg prøver lige at finde det script frem som Ditlev har lavet.. Det fungerer faktisk som det skal, på nær denher tidsfaktor som mangler.. :)
Avatar billede davidchristensen Praktikant
08. marts 2002 - 16:55 #11
Se her:

Action på knap:
on (release) {
    _root.clip.gotoAndPlay(2);
    _root.clip2.gotoAndPlay(2);
    _root.clip3.gotoAndPlay(5);
    _root.clip4.gotoAndPlay(5);
}

Action på MC: (Der er her flere frames i mc'et - et hvor man får det til at bevæge sig til sit target-position og et hvor det bevæger sig til en anden targetposition (eks. til startpositionen))

friction = 10;
targetX = 250;
targetY = 0;
velX = (targetX-_x)/friction;
velY = (targetY-_y)/friction;
setProperty ("", _x, Number(_x)+Number(velX));
setProperty ("", _y, Number(_y)+Number(velY));

Det er i dette script der mangler en tidsfaktor.. Det er såmænd det hele :)
Avatar billede lingoman Nybegynder
08. marts 2002 - 17:55 #12
Jeg lavede da ellers en tidsbaseret easing funktion til dig ? den med color easing...
Den kan du bruge på samme måde og flytte _x i stedet for color.transform'e og du kan selv indtaste tiden som parameter (i sekunder)  10 frames ved 12 fps = 1.2 sek
Avatar billede davidchristensen Praktikant
08. marts 2002 - 17:58 #13
Ja, jeg har godtnok allerede siddet og prøvet og se om jeg kunne lure den af, Geo :) Men det er ikke helt gået endnu..
Avatar billede lingoman Nybegynder
08. marts 2002 - 18:04 #14
Jeg sidder ude på seminariet uden flash på terminalen.. Kan du paste MC koden ind ? så kan jeg sikkert indsætte ændringen (c:
Avatar billede davidchristensen Praktikant
08. marts 2002 - 19:39 #15
Jamen, koden er sådanher:

friction = 10;
targetX = 250;
targetY = 0;
velX = (targetX-_x)/friction;
velY = (targetY-_y)/friction;
setProperty ("", _x, Number(_x)+Number(velX));
setProperty ("", _y, Number(_y)+Number(velY));

:)
Avatar billede davidchristensen Praktikant
08. marts 2002 - 19:41 #16
..Det er jo faktisk en frameaction, er det ikke?
Avatar billede lingoman Nybegynder
08. marts 2002 - 19:44 #17
Det jeg havde i tankerne var koden på colorEase MC'et..
Men jeg er på vej hjem nu så jeg kan jo også tjekke om jeg stadig har eksemplet når jeg når så langt..
Vender tilbage i morgen :)
Avatar billede lingoman Nybegynder
09. marts 2002 - 07:42 #18
Hej David,

Jeg har genbrugt color ease funktionen og flytter MC'ens _x i ved at specificere hvor meget den skal flytte sig og hvor lang tid den skal bruge.
Resten sørger funktionen selv for.
Håber at du kan følge min rodet demofil (c:

mvh geo
Avatar billede davidchristensen Praktikant
18. marts 2002 - 13:53 #19
Hej Geo. Det er super. Undskyld jeg har været så længe om at svare..

Og tak til Gotcha os'.. :)

David
-
Avatar billede lingoman Nybegynder
18. marts 2002 - 16:32 #20
Tak for point :)
Avatar billede davidchristensen Praktikant
18. marts 2002 - 16:46 #21
Det var så lidt.

Du kan jo se lidt på det nye spørgsmål om en scrollbar jeg netop lige har stillet, hvis du har lyst :)

David
-
Avatar billede lingoman Nybegynder
18. marts 2002 - 17:30 #22
Jeg sidder med noget andet lige nu, desværre..
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester