2011-11-21 48 views
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; 

没有任何一类的消息。如果我把这个活动放在第二堂课,什么都不会发生。除键盘事件之外的所有其他事件仍然有效。

回答

2

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

另一种可能性是强制舞台的焦点到您的具体类:stage.focus = this;,但我会尽可能避免这种情况。