0

Я разрабатываю приложение для киосков (игру), которое необходимо постоянно блокировать в полноэкранном режиме. Я использую для этого as3/flash/AIR. Сначала все началось хорошо, и по большей части все отлично работает. Но есть загадочная пивоварня где-то, о которой я не мог понять ... Вот где вам будет очень благодарна ваша помощь!AS3 - KeyboardEvent.KEY_DOWN в проекте AIR не запускает обработчик после удаления отображаемых объектов, а stage.focus не работает

Как я справилась с этой проблемой является добавление в самом начале приложения:

stage.addEventListener(KeyboardEvent.KEY_DOWN, playerOnKeyDown); 

Тогда на моей playerOnKeyDown функции:

function playerOnKeyDown(event:KeyboardEvent):void 
{ 
    if (event.keyCode == Keyboard.ESCAPE) 
    { 
     event.preventDefault(); 
     //More code here opening out menus, etc, etc.) 
    } 
} 

Таким образом, все это работало нормально , но, конечно, мне необходимо было также взять с собой:

stage.focus = stage; 

в сторону, в противном случае при удалении объекты - как в removeChild() - срабатывание события не будет вести себя так, как я хотел, потому что вспышка изменила фокус в другом месте в списке отображения.

Я старался добавить фокус на сцену каждый раз, когда удаляет «дочерний элемент», и он отлично работает везде, за исключением одного раза за весь ход, сразу после удаления объекта из загруженного извне swf ,

Я еще добавить строки, как и следовало ожидать, чтобы работать:

removeChild(childFromLoadedSWF); 
stage.focus = stage; 

кроме того, что, когда я нажимаю любую клавишу, событие не вызовет мою функцию, и если я нажать клавишу ESC, он выводит меня из полноэкранного режима (его поведение по умолчанию), еще раз, полностью обойдя мою функцию прослушивания playerOnKeyDown.

Самое странное, что прямо перед этим, линия:

stage.hasEventListener(KeyboardEvent.KEY_DOWN)) 

следы верно!

В центре внимания находится на стадии, слушатель находится, и все же при нажатии на клавишу ESC по умолчанию игнорирует мою функцию полностью ....

Что может быть причиной этого?

СПАСИБО ВАС !!

+0

Ну, похоже, по крайней мере на приложениях, упакованных для AIR, он действительно работает. На самом деле вышеприведенный код работает почти все время, предотвращая поведение ключа ESC по умолчанию. Проблема не в этом, а в том, что он обойдет моего слушателя. Не только клавиша ESC, но и ANY key .... Что-то еще должно продолжаться ... –

+0

Как будто слушатель был удален, кроме этого нет.Это полностью обходит мою функцию прослушивателя playerOnKeyDown. –

ответ

0

Похоже, мне просто нужно было удалить прослушиватель ENTER_FRAME, который у меня был. Это вызвало хаос со сценой. Теперь все отлично работает!

stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame) 

Для тех, кто хочет использовать AS3 для разработки настольных игр для Mac или ПК (как в Steam), это здорово.

Игра Machinarium, должно быть, сделала что-то подобное, потому что клавиша ESC никогда не вызывает этого эффекта, событие, хотя оно было сделано во вспышке.