2011-06-23 54 views
3

確實鍵盤事件不能在非顯示對象的舞臺之外訪問?ActionScript - 沒有舞臺的鍵盤事件?

例如:

package 
{ 
//Imports 
import flash.events.EventDispatcher; 
import flash.events.KeyboardEvent; 

//Class 
public class TestClass extends EventDispatcher 
    { 
    //Constructor 
    public function TestClass() 
     { 
     init(); 
     } 

    //Initialization 
    public function init():void 
     { 
     addEventListener(KeyboardEvent.KEY_UP, keyUpEventHandler); 
     } 

    //Key Up Event Handler 
    private function keyUpEventHandler(evt:KeyboardEvent):void 
     { 
     trace("Test Class: " + evt.keyCode); 
     } 
    } 
} 

在這裏,我想初始化new TestClass()然後按一個在鍵盤上接收輸出測試類:一

回答

6

據我所知(並根據livedocs示例),您需要將一個KeyboardEvent偵聽器添加到displayObject。我在抽象類和靜態類中通過將對stage(或任何displayObject)的引用傳遞給類的init方法或構造函數來完成此操作。

因此,舉例來說,在你的文檔類,你可以這樣做:

var testClass:TestClass = new TestClass(); 
testClass.init(stage); 

和TestClass.as做:

public function init(stageReference:DisplayObject):void 
{ 
    stageReference.addEventListener(KeyboardEvent.KEY_UP, keyUpEventHandler); 
} 

雖然我同意這是一個有點靠不住,我不我認爲有一種方法可以在不使用DisplayObject的情況下進行。