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() затем нажмите a на клавиатуре, чтобы получить выходной тестовый класс: a.

1 ответ

Решение

Насколько мне известно (и в соответствии с примером aliveocs), вам нужно добавить прослушиватель 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.

Другие вопросы по тегам