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);
        }
    }
}

在这里我想初始化 anew TestClass()然后按键盘上的 a 以接收输出Test Class: a

4

1 回答 1

6

据我所知(根据livedocs示例),您需要将 KeyboardEvent 侦听器添加到 displayObject。我已经在抽象类和静态类中完成了这项工作,方法是将舞台(或任何 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 就没有办法做到这一点。

于 2011-06-23T19:14:28.270 回答