Итак, вот мои настройки:
Мой класс документов - Main.as (он расширяет MovieClip).Следующий код находится в моем Main.as.
Я объявил все эти переменные в своем определении класса:
private var holder:MovieClip;
private var leftButton:SimpleButton;
private var rightButton:SimpleButton;
в конструкторе ...
holder = new MovieClip();
addChild(holder);
holder.addEventListener(KeyboardEvent.KEY_UP, handleKeyboardEvent);
leftButton = new Arrow();
rightButton = new Arrow();
holder.addChild(leftButton);
holder.addChild(rightButton);
leftButton.x = 50;
leftButton.rotation = 180;
rightButton.x = 150;
leftButton.y = rightButton.y = 50;
leftButton.addEventListener(MouseEvent.CLICK, handlePaging);
rightButton.addEventListener(MouseEvent.CLICK, handlePaging);
... за пределами конструктора ...
public function handleKeyboardEvent ( e:KeyboardEvent ) {
trace("got a keyboard event");
trace("e.charCode : " + e.charCode);
trace("e.keyCode : " + e.keyCode);
switch (e.keyCode) {
case 37: //left arrow
showPreviousMoment();
break;
case 39: //right arrow
showNextMoment();
break;
}
}
Две кнопки являются экземплярами мувиклипа Arrow, которые есть у меня в библиотеке.Мувиклип Arrow содержит только графику (в диалоговом окне свойств для него базовый класс - flash.display.SimpleButton).
Я хочу, чтобы пользователь мог нажимать экранные стрелки ИЛИ клавиши клавиатуры со стрелкамина страницу вперед и назад.
Итак ... когда я тестирую фильм или публикую его как приложение, нажатие левой и правой клавиш клавиатуры ничего не делает.ОДНАКО ... ПОСЛЕ ТОГО, КАК Я нажимаю на стрелки на экране, ТОГДА события клавиатуры накапливаются !!!Почему мои события клавиатуры не принимаются изначально?Почему при нажатии на экранные кнопки «держатель» начинает получать события?
ОБНОВЛЕНИЕ
Я также только что закомментировал весь мой код, КРОМЕ для создания экземпляра 'holder' и добавления слушателя.KeyboardEvents не прослушивается владельцем.
ОБНОВЛЕНИЕ ... ОТВЕТ
Итак, я обнаружил, что если я хочу глобально услышать KeyboardEvent, я должен зарегистрироватьсяэтап как слушатель.Так вот что сделали:
stage.addEventListener(KeyboardEvent.KEY_UP, handleKeyboardEvent);
Информация из книги Колина Мука:
События ввода с клавиатуры, которые запускают команды всего приложения, обычно обрабатываются глобально слушателями, зарегистрированными в Flash.Экземпляр игрока.Напротив, события ввода с клавиатуры, которые инициируют определенный ответ элемента интерфейса, обычно обрабатываются слушателями, зарегистрированными с объектом, который в настоящее время имеет фокус клавиатуры.
Так что я предполагаю, что в моей первоначальной версии, когда ящелкнув по экранной кнопке со стрелкой, я как-то выделил фокусировку клавиатуры на держателе;.