移动键不起作用

时间:2015-04-10 18:40:35

标签: actionscript-3

按箭头键时没有发生任何事情,但也没有任何错误:这有什么问题?如果我取消按键测试,它会相应地加速......

在这个阶段,我只是试图使用箭头键以惯性方式在屏幕上移动一个块。然而,这是我第一次涉足AS3,所以我可能会以完全错误的方式解决这个问题。

非常感谢任何帮助。

Unit.AS:

package  {
    import flash.display.MovieClip;
    import flash.events.*
    import flash.ui.Keyboard

    public class Unit extends MovieClip {

        var velocityX:Number = 1;
        var velocityY:Number = 1;
        var accellerationX:Number = 1;
        var accellerationY:Number = 1;

        public function Unit(){     
            addEventListener("enterFrame", move);

        }

        private function move(e:Event){

            accellerate()
            this.x += velocityX;
            this.y += velocityY;
        }

        private function accellerate(){

            if (Key.isDown(Keyboard.UP)){
                velocityY += accellerationY;
                trace("Accellerating");
            }
            if (Key.isDown(Keyboard.DOWN)){
                velocityY -= accellerationY;
                trace("Accellerating");
            }
            if (Key.isDown(Keyboard.RIGHT)){
                velocityX += accellerationX;
                trace("Accellerating");
            }
            if (Key.isDown(Keyboard.LEFT)){
                velocityX -= accellerationX;
                trace("Accellerating");
            }

        }
    }

}

Key.AS:

package 
{

import flash.display.Stage;
import flash.events.Event;
import flash.events.KeyboardEvent;

public class Key {

    private static var initialized:Boolean = false;
    private static var keysDown:Object = new Object(); 

    public static function initialize(stage:Stage) {
        if (!initialized) {
            stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
            stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
            stage.addEventListener(Event.DEACTIVATE, clearKeys);
            initialized = true;
        }
    }


    public static function isDown(keyCode:uint):Boolean 
    {
        return Boolean(keyCode in keysDown);
    }


    private static function keyPressed(event:KeyboardEvent):void {
        keysDown[event.keyCode] = true;
    }


    private static function keyReleased(event:KeyboardEvent):void {
        if (event.keyCode in keysDown) {
            delete keysDown[event.keyCode];
        }
    }


    private static function clearKeys(event:Event):void {

        keysDown = new Object();
    }
}
} 

1 个答案:

答案 0 :(得分:1)

在单元构造函数上调用initialize(stage)静态函数。

Key.initialize(stage);