我需要在哪里定义keyboardEvents?(Actionscript)

时间:2012-08-15 12:45:14

标签: actionscript-3 flash actionscript

我有2个类,一个是主类,另一个是坦克类,所以我需要定义这个事件:

addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
addEventListener(KeyboardEvent.KEY_UP, onKeyUp);

        private function onKeyDown(e:KeyboardEvent):void{

            trace(e.keyCode);


        }

        private function onKeyUp():void{


            trace(e.keyCode);

        }

我不知道为什么但是当我定义这个函数并在Tank类中添加监听器,然后在Main类中创建Tank对象addChild(tank)时,该事件不起作用,你能否给出我建议哪些事情更好,更有必要举办这些活动?

2 个答案:

答案 0 :(得分:1)

您必须向舞台添加侦听器。 Stage是一个全局对象,出现在每个DisplayObject中的Event.ADDED_TO_STAGE事件之后。您可以在tank类或Main中监听此事件,但最佳解决方案是创建一些全局单一类,它封装键盘事件并在任何地方使用它。因此,您可以完全禁用键盘,或者您可以实现该用户更改键。

public class KeyboardController extends EventDispathcer{

    public static const inst:KeyboardController  = new KeyboardController ();

    public static const STOP_TANK:String = "stopTank";

    public function init(stage:Stage):void{
        //init in you Main
        //add listeners
    }

    private function stopTankKeyHandler(event:KeyboardEvent):void{
        //who manages tank will listen thisevent:KeyboardController.inst.addEventListener(KeyboardController.STOP_TANK, someHandler);
        dispatchEvent(new Event(STOP_TANK));
    }
}

答案 1 :(得分:0)

你应该在舞台上定义它们:

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);