Форум 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=154574)

incvizitor 19.04.2011 21:06

Отправить "захватывающее" событие.
 
Мы все отлично знаем как сделать событие всплывающим. А есть ли способ отправить событие вниз, то есть в captureFase? Если в EventDispatcher - нет, то как такое можно реализовать?

Psycho Tiger 19.04.2011 21:27

Не-а. Capture phase для мышки.
Реализовать... гхм )
Вообще разница бублик фазы и каптёрки в порядке триггеров хэндлеров (ну, и мелочей в самом Event`е). Бублы реализовать можно, унаследовався от EventDispatcher и сделав повторный dispatchEvent по всем parent`ам. Чтобы сделать каптюр нужно инвертировать порядок триггеров. В принципе надо создать свой "самый-корневой" StageEventDispatcher и передать на него ссылку каждому CompositeEventDispatcher (ведь DisplayObject имеют ссылку на stage. Находишь интересным?). При вызове dispatchEvent у любого CompositeEventDispatcher вызывать customDispatchEvent у StageEventDispatcher, внутри которого формировать цепочку объектов вложенности - от StageEventDispatcher до target`а. После дёрнуть dispatchEvent у каждого в прямом направлении, а потом в обратном.
Но вообще я бы использовал приоритеты :D
Кстати, для мышки или для всех input device`s? Можно поймать Keyboard Event в capture фазе?

incvizitor 20.04.2011 13:48

Цитата:

Можно поймать Keyboard Event в capture фазе?
На сколько я знаю - нет. Причина: кода ты клэцаешь мышой, событие захватывает ту область над которой у тебя мышка. На клаве понять кому именно отправлять евент не понятно. Думаю евент сразу же всплывает от объекта у которого сейчас фокус.

Цитата:

Бублы реализовать можно, унаследовався от EventDispatcher и сделав повторный dispatchEvent по всем parent`ам.
Тогда будут проблемы с таргетом. Решения:
1 - сохранять перед диспатчем таргет в статический стек, а потом вынимать (не знаю сработает ли)
2 - при диспатче передавать таргет в конструктор евента.
3 - сделать для события "оболочку".

Но мне ни один из данных подходов не нравится, по этому я написал свой EventDispatche с нуля. Благо адобовцы создали IEventDispatcher. Пока вроде траблов нет =)

Psycho Tiger 20.04.2011 14:24

Цитата:

Причина: кода ты клэцаешь мышой, событие захватывает ту область над которой у тебя мышка. На клаве понять кому именно отправлять евент не понятно.
У клавы есть такая вещь как фокус.
Цитата:

Тогда будут проблемы с таргетом. Решения:
1 - сохранять перед диспатчем таргет в статический стек, а потом вынимать (не знаю сработает ли)
2 - при диспатче передавать таргет в конструктор евента.
3 - сделать для события "оболочку".
Для реализации 2 всё равно придется использовать свою оболочку, т.е. 2 и 3 одно и то же.
Погляди на то, как это делает дядька Блуд.

P.S. можно посмотреть на твою реализацию?

incvizitor 20.04.2011 14:55

Цитата:

У клавы есть такая вещь как фокус.
Смотри выше :)

Цитата:

Думаю евент сразу же всплывает от объекта у которого сейчас фокус.
**********

Цитата:

Погляди на то, как это делает дядька Блуд.
то же самое:

Цитата:

3 - сделать для события "оболочку".

Цитата:

Для реализации 2 всё равно придется использовать свою оболочку
Почему?

Цитата:

P.S. можно посмотреть на твою реализацию?
Я ща фрейм в порядок приведу, залью на google code, а потом уже лучше покажу. Ок?

Добавлено через 6 минут
ПС: под оболочкой я имею ввиду не обвертку, а контейнер.

BlooDHounD 20.04.2011 15:22

capture происходит так:
собираются родители в массив, и пробегаются в нужном порядке. потом наступает bubble и массив пробегается в другую сторону.

incvizitor 20.04.2011 15:30

BlooDHounD, вот теперь понял) Оказываеться, я не правильно понимал саму суть capture fase. Спасибо!

Psycho Tiger 20.04.2011 17:58

Цитата:

Сообщение от incvizitor (Сообщение 990909)
BlooDHounD, вот теперь понял) Оказываеться, я не правильно понимал саму суть capture fase. Спасибо!

Блин, я написал то же самое.
Цитата:

Вообще разница бублик фазы и каптёрки в порядке триггеров хэндлеров (ну, и мелочей в самом Event`е).
Цитата:

После дёрнуть dispatchEvent у каждого в прямом направлении, а потом в обратном.
Последнее время, почему-то, люди меня с трудом понимают :(

Цитата:

Смотри выше
Да, не заметил, извиняй )

incvizitor 20.04.2011 18:03

Psycho Tiger, вообще я понял написаное тобой, но только после того как прочитал пост 6 =)


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

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