2016-11-18 24 views
2

公認的方法我想有一個叫Commands類,我可以把不同的按鍵和功能到將控制遊戲狀態和變量快速便捷的遊戲測試。我想這一點,但它不工作...AS3的addEventListener不是在我的自定義類

package gameTesting { 
    import flash.events.KeyboardEvent; 
    import flash.events.*; 
    import flash.ui.Keyboard; 
    import flash.display.*; 
    import flash.events.EventDispatcher; 

    public class Commands { 

     public function Commands() { 
      addEventListeners(); 
     } 

     public function addEventListeners():void{ 
      addEventListener(KeyboardEvent.KEY_DOWN,keyDown); 
     } 

     public function keyDown(ke:KeyboardEvent):void{ 
      trace("key pressed"); 
     } 

    } 

} 

會拋出這個錯誤:

C:...\Commands.as, Line 15, Column 4 1180: Call to a possibly undefined method addEventListener. 

所以,我試圖有我的擴展類的東西,繼承了EventDispatcher方法:

//... 
    public class Commands extends DisplayObject{ 
// ... 

但我剛剛從我的主要.as文件拋出此錯誤試圖實例化此類時:

ArgumentError: Error #2012: Commands$ class cannot be instantiated. 

我也試過扔static關鍵字周圍只是爆笑,但沒有骰子。

我在這裏錯過了什麼?

順便說一下,我這樣做事情的原因是,我可以通過簡單地刪除實例化此類的代碼行來刪除此功能(以便用戶無法使用它)。我認爲它很漂亮,但如果這看起來像天生一樣,無論如何說出來!

回答

5

試圖通過舞臺上的命令,這樣你就可以在舞臺上添加的addEventListener。

import flash.display.Stage; 

public class Commands { 

    public function Commands(stage:Stage) { 
     stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDown); 
    } 

    public function keyDown(ke:KeyboardEvent):void{ 
     trace("key pressed"); 
    } 

} 
+0

謝謝。我嘗試了這一點,我得到了類型爲Class的隱式強制轉換爲無關類型階段。 (哦,我試着先通過舞臺,現在我看到我應該通過小寫階段)......我認爲這讓我更接近。我會繼續讓你知道 –

+0

瞧!這是做到了。我學到了東西。謝謝! –

+0

您可以通過添加以下內容來完成您的答案:'var com:Commands = new Commands(stage);'可以從主文檔中調用。 –

相關問題