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>.

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

CAPTCHA
Этот вопрос помогает предотвратить автоматический спам
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.
To prevent automated spam submissions leave this field empty.