键盘事件仅从原始类中触发

时间:2011-11-21 05:41:29

标签: actionscript-3 flashdevelop flash-player-11

使用FlashDevelop,我有一些代码来检测键盘事件。问题是,如果我从主类(Main.as)运行此代码,它将触发事件,但如果我去另一个类则不会。

例如,我有主类,它有这个功能

addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
public function onKeyDown(e:KeyboardEvent):void
{
    trace(e.keyCode);
    if (gameState == 1){main.onKeyDown(e);}
}

现在,这在第一堂课中效果很好。但是当我把它发给我的第二堂课MainMenu.as时,没有任何反应。

        main = new MainMenu();
        addChild(main);
        gameState = 1;

两个班级都没有留言。如果我把事件放在第二堂课,没有任何反应。除键盘事件之外的所有其他事件仍然有效。

1 个答案:

答案 0 :(得分:2)

键盘事件仅转发给具有焦点(及其父母)的MovieClip。如果您想要捕获所有事件而没有任何异常,请将其添加到舞台(因为它是所有事件的父级,它将始终接收事件):stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);。记得在完成课程后删除事件(它不会自行删除)。

另一种可能性是强制舞台的焦点到你的特定班级:stage.focus = this;,但如果可能的话我会避免这种情况。