as3中的非补间动画(动作3)

时间:2016-07-19 22:56:33

标签: actionscript-3 flash animation

我希望能够更改为步行动画的帧。我有3帧。第二个和第三个是2个步行框架 第一个是正常的

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;
    }
}

}

所以在我的另一个文件中(对于播放器类)我添加了一个stop();如果这有帮助。但它会移动。调用函数将其移动到第2帧或第3帧,但只有1.它没有动画它。只有一帧被调用并且卡住了

编辑:我用keyup事件监听器和stopAnimation()修复它,但现在当密钥为HELD时它不起作用。它只是卡在1帧上,因为它被称为太多。只有当按下第一个按键时,我才能这样做

1 个答案:

答案 0 :(得分:0)

您应该更改Player类以根据其状态控制自己的动画(向左走,向右走,静止不动)。据我所知,你只有2帧(#2和#3)代表步行动画,所以你需要在你的角色走路时在这两个帧之间交替。此外,您的Player应更改为scaleX属性。为此,请为您的Player课程提供三个功能,然后在适当的时间调用它们。

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
        }
    }
}

然后您决定何时在听众中拨打player.moveLeft()和其他人,以及何时拨打player.standStill()