2010-11-04 76 views
1

我是ActionScript新手,正在使用FlashDevelop IDE。我一直在玩一些非常簡單的事情,並遇到了一個我無法解決的問題。ActionScript 3 KeyboardEvent not firing

我的應用程序編譯並運行,並且一個監視點擊事件的函數完全觸發,當我將它傳遞給trace()時,我可以在控制檯中看到事件,但觀察KeyboardEvent的同一代碼根本無法觸發。

這裏是我的代碼:

package GameTesting 
{ 

    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.Sprite; 

    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.events.KeyboardEvent; 

    [Frame(factoryClass="GameTesting.Preloader")] 
    public class Main extends Sprite 
    { 

     public function Main():void 
     { 
      if (stage) { 
       init(); 
      } else { 
       addEventListener(Event.ADDED_TO_STAGE, init); 
      } 
     } 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE,init); 

      addEventListener(MouseEvent.CLICK, onClickEvent); 
      addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownEvent); 
     } 

     private function onKeyDownEvent(e:KeyboardEvent):void 
     { 
      trace(e); 
     } 

     private function onClickEvent(e:MouseEvent):void 
     { 
      trace(e); 
     } 

    } 

} 

的MouseEvent跟蹤()觸發每預期時間,但從來沒有的KeyboardEvent火災,無論我按什麼鍵。有任何想法嗎?

回答

6

您需要將偵聽器添加到舞臺:

private function init(e:Event = null):void 
{ 
    removeEventListener(Event.ADDED_TO_STAGE,init); 

    stage.addEventListener(MouseEvent.CLICK, onClickEvent); 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownEvent); 
} 
+0

我有原來,它沒有工作。由於我真的不知道舞臺對象是什麼,因此我將它取出來,並且由於CLICK事件繼續工作,我認爲它與瀏覽器中的頂層窗口對象相似。無論哪種方式,即使使用stage.addEventListener()它仍然無法正常工作,儘管奇怪的是CLICK事件繼續發揮作用。我很困惑。 :/ – 2010-11-05 09:38:59

+0

嗯,我不知道發生了什麼,但是當我編譯我的代碼時,它工作。即使我向上帝發誓我沒有任何改變。也許FlashDevelop是一個有問題的IDE?誰知道。無論哪種方式,現在它可以工作了,我可以驗證在StageEvent上調用stage對象的addEventListener對於KeyboardEvents是必需的,但對於MouseEvents不是。不知道爲什麼,但無論如何都很高興。謝謝你的幫助。 – 2010-11-05 09:43:03

1

如果您是在Flash IDE(用於CS4至少),你還需要禁用鍵盤快捷方式,當你調試(按Ctrl + Shift + Enter)或測試(Ctrl + Enter)fla。

在電影窗口中,選擇'控制' - >'禁用鍵盤快捷鍵'。 這將停止Flash IDE接收鍵盤輸入,並允許調試/測試窗口代替。

3

您可能需要確保偵聽該事件的影片剪輯具有焦點。如果您爲遊戲設置了某種菜單或開始屏幕,您可以點擊一個按鈕開始,即使它已從舞臺上移除,該動畫片段仍可保留焦點。

這裏有一個很好的文章中進一步詳細解釋這一點: Keyboard events on stage are not working...?