Jeg skjønner ikke helt hvordan du har klart dette uten å... vel, klare det; men jeg jeg kan jo skrive ned hvordan jeg ville løst det:
Kode
var mouseclick_x:Number=int(object.x);
var mouseclick_y:Number=int(object.y);
function mouseclick(e:MouseEvent) {
mouseclick_x=int(e.stageX);
mouseclick_y=int(e.stageY);
}
function enterframe(e:Event) {
if (mouseclick_x<int(object.x)) {
object.x--;
} else if (mouseclick_x > int(object.x)) {
object.x++;
}
if (mouseclick_y<int(object.y)) {
object.y--;
} else if (mouseclick_y > int(object.y)) {
object.y++;
}
if ((mouseclick_x!=int(object.x)||mouseclick_y!=int(object.y)) && object.currentFrame == 1) {
object.gotoAndPlay(2);
} else if (mouseclick_x==int(object.x)&&mouseclick_y==int(object.y)) {
object.gotoAndStop(1);
}
}
stage.addEventListener(Event.ENTER_FRAME, enterframe);
stage.addEventListener(MouseEvent.CLICK, mouseclick);
For å bruke denne koden trenger du et prosjekt med én frame. Lim inn koden i selve framen, og lag et movieclip. Kall movieclipet "object". Deretter åpner du movieclipet, og legger til animasjonen fra og med frame nummer to inni der. Første frame vil vises når objektet står i ro, og alt fra frame 2 og utover skal spilles mens objektet beveger seg. For å få animasjonen til å gjenta seg kan du legge til en "gotoAndPlay(2);" i siste frame i animasjonen, slik at den hopper tilbake til start.
Det første jeg gjør i koden er å sette opp to variabler for å lagre posisjonen til museklikket, X og Y. Deretter lager jeg to funksjoner, én for å lagre museklikkene i variablene (mouseclick). Jeg bruker funksjonen int() for å runde av til nærmeste heltall (integer); hvis du fjerner denne vil du oppdage at avataren din ofte vil sette seg fast i en animasjonsloop fordi den aldri klarer å treffe nøyaktig på koordinatene.
Så kommer hovedfunksjonen, som består av tre store if-løkker. Enterframe kaller jeg den, ettersom den kjøres én gang for hver gang framen oppdateres (dette vil avhenge av frame rate på prosjektet ditt, beste resultat er som regel på 120 ganger per sekund, som er maks hastighet). De to første if-løkkene sjekker om variablene er ulik objektets posisjon - hvis de ER det, så har noen klikket et sted med musa, og objektet skal flytte seg. Det er totalt fire slike if-sjekker; både for X og for Y, og verdiene kan være både større og mindre (høyre, venstre, opp eller ned, med andre ord). Den tredje if-løkken styrer animasjonen. Hvis koordinatene til objektet ikke stemmer overens med variablene OG objektets timeline er på frame 1, så skal den hoppe til frame 2 (start animasjonen). Hvis koordinatene og variablene er like, så hopper vi til frame 1 og stopper (stopp animasjonen). De to siste linjene legger til såkalte eventlisteners, et snedig konsept som man bare må venne seg til når man jobber i AS3. Det dreier seg i korte trekk om å knytte funksjonene våre (enterframe og mouseclick) til eventer (museklikk og framerate).
Hvis du trenger å ha egne animasjoner ut i fra hvilken retning objektet beveger seg også, så kan du fjerne den tredje if-løkka og heller plotte inn den funksjonen i de to andre løkkene, siden de allerede vet hvilken retning objektet beveger seg i.
Så for å svare på spørsmålet ditt; du trenger strengt tatt ikke bytte movieclip i det hele tatt, du kan bare bruke start- og stopp-koder i movieclipets tidslinje.