Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   отключить на время у всех объектов реакцию на клавиатуру и мышь (http://www.flasher.ru/forum/showthread.php?t=151693)

easy.proger 04.03.2011 02:18

отключить на время у всех объектов реакцию на клавиатуру и мышь
 
Привет !
Как можно запретить всем классам реагировать на клавиатуру, кроме прохода по всем этим классам и отключением вручную

С мышью конечно можно поступить проще - кинуть спрайт на сцену чтобы тот перехватывал все клики, но хочется более удобного решения )

in4core 04.03.2011 04:08

Собственно а зачем? Вы и так можете повесить события клавы тока туда куда надо. Или вы вешаете всему что только попадается, а потом думаете, у кого бы убрать?))

Код AS3:

addEventListener(Event.ENTER_FRAME , frame);
function frame(e:Event) : void {  if(Keybord.KeyIsDown && _constant)

.... // так на вскиду если, надеюсь понятно о чем я. На ошибки внимания не обращайте - так задумано ))

easy.proger 04.03.2011 06:08

Цитата:

Сообщение от in4core (Сообщение 977933)
Собственно а зачем? Вы и так можете повесить события клавы тока туда куда надо. Или вы вешаете всему что только попадается, а потом думаете, у кого бы убрать?))

Код AS3:

addEventListener(Event.ENTER_FRAME , frame);
function frame(e:Event) : void {  if(Keybord.KeyIsDown && _constant)

.... // так на вскиду если, надеюсь понятно о чем я. На ошибки внимания не обращайте - так задумано ))

Нет, я пишу компонент который при определенных обстоятельствах должен блокировать интерактив не давая другим компонентам обрабатывать клавиатуру.

Пример:
Есть куча разных компонентов, у всех у них есть хоткеи, я пишу диалог который при своем отображении должен блокировать весь интерактив.

На сколько я понял приведенный код производит "отлов" всех событий, а не блокировку, поправьте если не прав

Gaen 04.03.2011 08:20

Цитата:

Сообщение от KeyboardEvent reference
To listen globally for key events, listen on the Stage for the capture and target or bubble phase

Отлавливаете событие в фазе захвата и останавливаете при помощи stopPropagation().

in4core, ENTER_FRAME тут совсем ни к месту.

easy.proger 04.03.2011 08:53

Я так понимаю для этого нужно при старте проекта сразу повесить листенер на клавиатуру и флагами уже все решать

Получается все идет по цепочке ( оно и логично конечно ) если в первом хенделере мы прерываем событие то остальные его не получают, тут вопросов нету, но есть условие, должен быть "первый" хендлер который будет решать отдавать дальше сообщение или нет, а можно ли как то определить в любой момент любой хендлер первым ? типа
addEventListenerAt(,0) ? то есть насильно и в любой момент встать первым в цепочку ?

ZergMaster 16.05.2012 16:09

господа, имею тот же вопрос.
Ситуация такая:
Есть главная флешка, в которой мы можем выбрать игру.
Есть второстепенная (флешка-игра), которая загружается в эту главную. Во второстепенной существуют некие листенеры, неизвестно куда накинутые, позволяющие управлять игрой с клавиатуры.
Мне в какой-то момент из внешней флешки-родителя нужно отключить возможность управлять флешкой-ребенком с клавиатуры. Как это сделать, ума не приложу?.. Хотя прикладывал уже и так, и эдак. Пробовал кидать KeyboardEvent.KEY_DOWN на stage флешки-родителя и делать stopPropagation но ничего не останавливается... все идет дальше. Есть может какие-нибудь способы тупо заблочить клавиатуру у кого-нибудь?

Партизан 16.05.2012 17:06

Написал же Gaen выше.

Добавлено через 5 минут
Сорри, не внимательно прочел... Приоритет ставили? useCapture?

ZergMaster 16.05.2012 17:51

Партизан, хм... Приоритет стоит 1, а вот useCapture false. Это на что влияет? (хелп читал, но там как-то заковыристо написано.))
Код AS3:

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownH, false, 1);


Партизан 16.05.2012 18:29

попробуйте true и приоритет, скажем 1000
Да, и еще естественно KEY_UP порежте

Aquahawk 16.05.2012 18:34

чтобы словить раньше надо регистрировать свои лисенеры до загрузки с приоритетом int.MAX_VALUE в фазе захвата, и там делать stopImmediatePropogation и можно ещё preventDefault до кучи. Тогда даже если потом кто-то зарегает лисенера с тем же приоритетом потом то он обрабатываться будет всё равно позднее.


Часовой пояс GMT +4, время: 21:02.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.