ActionScript - 没有舞台的键盘事件?

The*_*978 3 keyboard events stage actionscript-3

键盘事件是否无法在非显示对象的舞台外访问?

例:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里我想初始化一个new TestClass()然后在键盘上按a接收输出测试类:a.

小智 6

据我所知(并根据livedocs示例),您需要将一个KeyboardEvent侦听器添加到displayObject.我已经在抽象和静态类中完成了这个操作,方法是将对stage(或任何displayObject)的引用传递给类的init方法或构造函数.

因此,例如,在您的文档类中,您可以执行以下操作:

var testClass:TestClass = new TestClass();
testClass.init(stage);
Run Code Online (Sandbox Code Playgroud)

在TestClass.as中:

public function init(stageReference:DisplayObject):void
{
   stageReference.addEventListener(KeyboardEvent.KEY_UP, keyUpEventHandler);
}
Run Code Online (Sandbox Code Playgroud)

虽然我同意它有点不稳定,但我认为没有使用DisplayObject就可以做到这一点.