我有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)时,该事件不起作用,你能否给出我建议哪些事情更好,更有必要举办这些活动?
答案 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);