0

我有 2 个类,一个是主类,另一个是 Tank 类,所以我需要在哪里定义这些事件:

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) 时,该事件不起作用,您能给我一个建议吗把这些事件放在哪里更好和必要?

4

2 回答 2

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));
    }
}
于 2012-08-15T13:27:43.640 回答
0

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

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
于 2012-08-15T12:57:39.737 回答