0

使用 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;

两个班级都没有消息。如果我把事件放在第二类,什么都不会发生。除了键盘事件之外的所有其他事件仍然有效。

4

1 回答 1

2

键盘事件仅转发给具有焦点的 MovieClip(及其父级)。如果您想毫无例外地捕获所有事件,请将其添加到舞台(因为它是所有事物的父级,它将始终接收事件)stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);:。请记住在完成课程后删除该事件(它不会自行删除)。

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

于 2011-11-21T05:47:14.313 回答