Sprite не получает события клавиатуры - PullRequest
2 голосов
/ 14 января 2011

У меня есть Sprite, который является дочерним по отношению к объекту Flex и действует как главное "игровое окно". Таким образом, во время игры он должен получать ввод с клавиатуры, а в других случаях - нет. Когда я добавляю к нему прослушиватель клавиатуры, он никогда не срабатывает.

Нужно ли, чтобы родительские объекты как-то «ели» события или что-то подобное? Я получаю то же самое с событиями колесика мыши, но события щелчка мышью в порядке. Sprite, кажется, не имеет понятия о фокусе, если я не пропустил его.

В более общем смысле при таком подходе есть какие-либо предложения о наилучшем способе? Например, некоторые ключи могут все еще нуждаться в перехвате, прежде чем попасть в игровое окно, например, ESC или F1 или что-то в этом роде ... цель - игровое окно не знает о другом пользовательском интерфейсе.

Ответы [ 3 ]

3 голосов
/ 14 января 2011

Ваш спрайт должен иметь фокус ввода для получения событий клавиатуры.

Что касается рекомендаций: если все ваше приложение основано на вводе с клавиатуры и если вам не нужно переключать контексты (одна и та же клавиша означает другое, если выбран другой объект), вы можете просто добавить слушатели на сцене.

В противном случае вы можете использовать stage.focus , чтобы установить фокус на нужный объект.

1 голос
/ 11 ноября 2011

Чтобы ваш спрайт был сфокусирован, вам нужно реализовать интерфейс mx.managers.IFocusManagerComponent. В противном случае клавиша табуляции не будет работать на спрайте. Согласно документу Adobe:

Интерфейс IFocusManagerComponent определяет интерфейс, который должны реализовывать фокусируемые компоненты, чтобы получать фокус от FocusManager.

Вы можете посмотреть на код в UIComponent, чтобы узнать, как они реализовали функции, определенные в IFocusManagerComponent.

0 голосов
/ 15 января 2011

Вы действительно должны прослушивать события клавиатуры в корневом приложении или на сцене.Поскольку ActionScript имеет правильное всплывающее окно событий, вы всегда можете быть уверены, что события будут там (если они не используются текстовым полем или другим вводом).Вы можете смоделировать их нахождение непосредственно в спрайте, добавив обработчики событий на сцену, когда они вам нужны для спрайта, и удалив их со сцены, когда вы этого не сделаете.измените переменную context при изменении контекста вашего приложения.Затем вы обусловливаете действие слушателя события на context вашего приложения.Одним из основных преимуществ этого является то, что вся ваша ключевая логика событий находится в одном и том же месте и может быть намного легче отлажена.

Что касается колеса мыши, если вы планируете встроить игру на других сайтахВы могли бы также не волноваться об этом.Они, вероятно, не позволят вам установить JS-хак, чтобы он работал на Mac.В противном случае, получите дополнение SWFObject: MouseWheel в Mac OS.

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