2011-06-23 44 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的情况下进行。