Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  3 814
Hei

Jeg har et problem med flash.

Jeg prøver å lage en person som kan styres med musa. Når jeg klikker en plass skal avataren gå dit.

Dette får jeg til med tweening i AS3, men det eneste jeg får til er movieclippet hvor figuren står stille. Jeg har laget enda et movie clip hvor personen går til siden. Men hvordan kan jeg bytte movieclip når figuren beveger seg?
Limited edition
Moff's Avatar
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.
Hva om du lager fire movieclips som går i loop og inneholder bevegelsene venstre, høyre, opp og ned. Om mål._x != avatar._x laste du venstre eller høyre.fla/swf og får denne til å bevege seg slik at ._x == ._x. På denne måten slipper du frames, og animasjonen vil gå kontinuerlig hele veien.
Skal du bevege deg på skrå må du ha flere animasjoner for syns skyld. Enkleste er vel noe ala tidlig zelda.
Yochi's Avatar
Trådstarter
Takk til Moff, fikk løst det ved å følge din guide ca