Событие с клавиатурой только из оригинального класса

Используя FlashDevelop, у меня есть немного кода для обнаружения событий клавиатуры. Проблема в том, что если я запусту этот код из основного класса (Main.as), он вызовет событие, но не при переходе в другой класс.

Например, у меня есть основной класс, и у него есть эта функция

addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
public function onKeyDown(e:KeyboardEvent):void
{
    trace(e.keyCode);
    if (gameState == 1){main.onKeyDown(e);}
}

Теперь это отлично работает в первом классе. Но когда я отправляю его второму классу, MainMenu.as, ничего не происходит.

        main = new MainMenu();
        addChild(main);
        gameState = 1;

Там нет сообщения ни от одного класса. Если я помещу событие во второй класс, ничего не произойдет. Все остальные события, кроме событий клавиатуры, все еще работают.

1 ответ

Решение

События клавиатуры передаются только тем видеоклипам, у которых есть фокус (и их родителям). Если вы хотите захватить все события без каких-либо исключений, добавьте его на сцену (так как он является родителем всего, он всегда будет получать событие): stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);, Не забудьте удалить событие после того, как вы закончите с классом (он не удалит сам себя).

Другая возможность состоит в том, чтобы перенести фокус сцены на ваш конкретный класс: stage.focus = this;, но я бы избежал этого, если это возможно.

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