2016-07-19 16 views
-3

Ich möchte in der Lage sein, zu Frames für eine laufende Animation zu ändern. Ich habe 3 Frames. Die zweite und dritte sind zwei Gehhilfen die erste eine normale ist immer noch aufNicht-Tween-Animation in as3 (Actionscript 3)

package { 

import flash.display.MovieClip; 
import flash.events.KeyboardEvent; 
import flash.events.Event; 
import flash.ui.Keyboard; 

public class main extends MovieClip { 
    var player:Player = new Player(); 

    var px = 0; 
    var py = 0; 

    public function main() { 
     stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyPressed); 
     addEventListener(Event.ENTER_FRAME, update); 
    } 
    public function KeyPressed(e:KeyboardEvent):void { 
     //trace(e.keyCode); 
     trace(px); 
     if(e.keyCode == 38 || e.keyCode == 87) { 
      trace('w/up'); 
      py -= 5; 
      moveAnimation(); 
     } 
     if(e.keyCode == 39 || e.keyCode == 68) { 
      trace('d/right'); 
      px += 5; 
      moveAnimation(); 
     } 
     if(e.keyCode == 37 || e.keyCode == 65) { 
      trace('a/left'); 
      px -= 5; 
      moveAnimation(); 
     } 
     if(e.keyCode == 40 || e.keyCode == 83) { 
      trace('s/down'); 
      py += 5; 
      moveAnimation(); 
     } 
    } 
    public function moveAnimation():void { 
     player.gotoAndStop(2); 
     player.gotoAndStop(3); 
     player.gotoAndStop(1); 
    } 
    public function update(e:Event):void { 
     addChild(player); 
     player.x = px; 
     player.y = py; 
    } 
} 

}

So auch in meinen anderen Datei (für den Spieler-Klasse) Ich habe eine stop(); wenn das hilft. Aber es bewegt sich. Die aufrufende Funktion verschiebt es wie das 2. oder 3. Bild, aber nur 1. Es animiert es nicht. Nur ein Rahmen wird aufgerufen und seine stecken

Edit: Ich habe es mit einem Keyup-Event-Listener und einem stopAnimation() behoben, aber jetzt funktioniert es nicht, wenn der Schlüssel HELD ist. Es bleibt nur auf 1 Frame hängen, weil es zu viel aufgerufen wird. Wie mache ich das nur wenn die Taste FIRST gedrückt wird es geht

+0

Edit: Ich habe es mit einem Keyup-Event-Listener und einer stopAnimation() behoben, aber jetzt funktioniert es nicht, wenn der Schlüssel gehalten – Artsicle

+0

Bitte fügen Sie keine Informationen in Kommentaren, stattdessen [bearbeiten] Ihre Frage und schließen Sie sie ein. – null

+0

Wollen Sie antworten oder nicht? – Artsicle

Antwort

0

Sie sollten die Player Klasse ändern, um ihre eigene Animation basierend auf ihrem Status zu steuern (nach links gehen, rechts gehen, still stehen). Wie ich es verstehe, haben Sie nur 2 Frames (# 2 und # 3), die Laufanimation darstellen, also müssen Sie zwischen diesen beiden wechseln, wenn Ihr Charakter geht. Auch Ihre Player sollte mit scaleX Eigentum Gesicht ändern. Um dies zu tun, geben Sie Ihre Player Klasse drei Funktionen, dann rufen Sie sie zu den richtigen Zeiten.

public class Player extends MovieClip { 
    private var moving:Boolean=false; 
    public function Player() { 
     addEventListener(Event.ENTER_FRAME,update); 
     stop(); // just in case 
    } 
    function moveLeft():void { 
     this.scaleX=-1; 
     this.moving=true; 
    } 
    function moveRight():void { 
     this.scaleX=1; 
     this.moving=true; 
    } 
    function standStill():void { // stop() is defined in MovieClip 
     this.moving=false; 
    } 
    private function update(e:Event):void { 
     if (this.moving) { 
      if (this.currentFrame==3) { // change this if you have longer walk animation 
       gotoAndStop(2); 
      } else { 
       nextFrame(); 
      } // faking animation loop with enterframe listener 
     } else { 
      gotoAndStop(1); // display stand still 
     } 
    } 
} 

Dann entscheiden Sie, wenn in Ihren Zuhörern player.moveLeft() und andere zu nennen, und wenn player.standStill() zu nennen.

+0

Ich habe es bereits behoben :) – Artsicle

+0

Kaum eine Lösung, wenn es an einem anderen Ort "nicht funktioniert". – Vesper

+0

Es ist ein Fix,: P – Artsicle