Listener клавиатуры на stage в flash9

Иногда бывает удобно использовать listener слушающий события клавиатуры глобально, т.е. во всём приложении (например при создании flash игр). В flash8 с этим не возникает особых проблем, но в flash9 есть баг, в результате которого при удалении со сцены объекта, на котором был фокус, события клавиатуры перестают отлавливаться и сценой в целом, так как фокус в таком случае теряет и stage.

Иногда может помочь простой принудительный возврат фокуса объекту stage:
stage.focus = stage;

Но более гибким и удобным решением может быть использование такого простого слушателя, подсмотренного в письме Николая Артамонова из рассылки сообщества haXe:

Lib.current.addEventListener(Event.ENTER_FRAME, function(e) {
        if (Lib.current.stage.focus.stage == null) {
                Lib.current.stage.focus = Lib.current;
        }
});

Этот сниппет можно просто вставлять в свой haXe проект для flash9 и забывать про описанный выше баг, оставаясь уверенным в том, что в нужный момент stage останется в фокусе и события клавиатуры будет отловлены нашим listener'ом.

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <blockcode> <dd>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. The supported tag styles are: <foo>, [foo].
  • Use [gist:####] where #### is your gist number to embed the gist.

Подробнее о форматировании

CAPTCHA
Для отсева спамеров
5
2
r
H
j
e
Enter the code without spaces and pay attention to upper/lower case.