2011-11-21 69 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;,但我會盡可能避免這種情況。