Почему слушатель KeyboardEvent (AS3) не реагирует, пока я не добавлю его на сцену? - PullRequest
0 голосов
/ 27 августа 2011

Почему слушатель KeyboardEvent (AS3) не реагирует до тех пор, пока я не добавлю его на сцену, а не когда я просто запишу его в Класс документа, как я это делаю с любой другой функцией?Я имею в виду, я должен написать

stage.addEventListener(KeyboardEvent.KEY_DOWN, someFunc);

, а не просто

addEventListener(KeyboardEvent.KEY_DOWN, someFunc);

, как я делаю с остальными?

Ответы [ 2 ]

2 голосов
/ 28 августа 2011

вы на самом деле можете ... но прежде чем вам нужно определить stage.focus для объекта, который вы хотите прослушать событие KeyboardEvent.KEY_DOWN.

stage.focus = this
this.addEventListener(KeyboardEvent.KEY_DOWN, someFunc);

В справочном руководстве as3 вы можете увидеть больше информации о KeyboardEvent:

Чтобы прослушать ключевые события в глобальном масштабе, прослушайте сцену для захвата и целевую или пузырьковую фазу.Это очень полезно, если вы хотите прослушать KeyboardEvent на TextField, например:

text_tf.addEventListener(KeyboardEvent.KEY_DOWN, someFunc);

Надеюсь, это прояснит ваши сомнения.

0 голосов
/ 13 ноября 2015

У меня была эта проблема с Flashbuilder 4.6, использующим Flex и Actionscript3. Я просто публикую это на тот случай, если другие люди захотят альтернативу решению, потому что это решение не работает для меня.

Вот что я сделал:

public class CoreContainer extends Canvas implements IFocusManagerContainer, IFocusManagerComponent
{
    private var _focus:FocusManager = new FocusManager(this as IFocusManagerContainer);

    public function CoreContainer()
    {
        ...
        this._focus.setFocus(this);
        this.addEventListener(KeyboardEvent.KEY_DOWN, this.handleKeyDown);
        ...
    }

    private function handleKeyDown(event:KeyboardEvent):void
    {
        KeyboardShortcuts.handleKeyDown(event);
    }
}

По сути, я сделал то же самое, что и - m, но так как я не мог получить доступ к stage как глобальной переменной в flex, я импровизировал, чтобы получить доступ к ней для этого конкретного класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...