![]() |
ивентная модель Flash
Господа, опасаюсь, что затронул тему, на которую мне никто ничего не напишет, кроме как читай книги и т.д. Я хотел бы понять на примере какой-то схемы или абстракции как работает ивентная модель во Flash. Как взаимодействуют диспатчер с листнером, контроллером? Может кто-то решиться на пальцах объяснить или стрелочками показать как это устроено внутри...
|
http://help.adobe.com/en_US/ActionSc...0204-7e4f.html вот вам со стрелочками :)
|
Вложений: 1
Потратил два часа жизни, получился вот такой примерчик
Вложение 24003 Класс Main Код AS3:
Код AS3:
Класс CloseWindow в пакете components Код AS3:
Код AS3:
Исходник принципиально не выложил, попробуйте сперва сами разобраться :) Что не ясно спрашивайте. |
KiL33 :это в ту тему?
на русском: http://help.adobe.com/ru_RU/ActionSc...0204-7e4f.html а вообще в начале освоения AS3 меня жутко смущали наименования target и currentTarget - никак не мог понять почему это "цель" и " текущая цель". по нормальной логике целью является объект хранящий листенеры или сам листенер. По нормальной логике именования объект являющийся инициатором события должен называться sender (в AS3==target) - объект от которого получено событие currentSender (currentTarget) Может быть адобовцы не захотели чтобы их сравнивали с C# итп. может еще что.. я конечно уже всё давно понял и привык, но для новичков бывает сложновато въехать.. Цитата:
Какая цель может быть у события? У события как абстрактного объекта может быть только инициатор (sender) и может быть еще корреспондент вещающий события (currentSender) , который часто и есть инициатор, и отличается от него только в случае всплывающих событий. всё.. слушатель(listener) - вот это по сути цель события, но само событие к ним не привязано. слушатель только слушает у корреспондентов события определённого типа. и принимает их в качестве параметра. |
Cтрелочки, конечно, хорошо, но в коде-то оно нагляднее :)
|
Насколько я понял, в документе http://help.adobe.com/ru_RU/ActionSc...0204-7e4f.html речь идет о том, как рассылает события рантайм плеера (сам плеер). Тогда все довольно логично: рантайм ловит, допустим, клик, порождает эвент-объект и ставит его в очередь на прокачку от стейджа до целевого узла (чилда) и обратно. Сам целевой узел определяется рантаймом в момент щелчка. Энтерфрейм шлется на прямую. В этом смысле все понятно. target, currentTarget - вполне оправдано употребляются в этом контексте. Почему не все шлется на прямую, а прокачивается очередь - тоже понятно, так проще ловить события в одной веток иерархии отображения. Если целевой объект не входит в иерархию отображения, то ивент шлется ему напрямую, (пример - сокет), что тоже логично.
Если мы добавили листенера на клик по целевому узлу, то вместе с целевым узлом, клик получит и листенер. Это логично делать, если листенер сидит в другой ветке иерархии отображаемых объектов или ниже/на том же уровне в той же ветке. Либо если целевой объект не входит в иерархию отображения вообще. Или я что-то попутал? Пользовательские события порождаются не рантаймом, а кодом, вот тут, пожалуй о целевом объекте речь идти не может. Пользовательский эвент рассылается по списку листенеров, добавленных к объекту-источнику, в очередь прокачки такой эвент совать ни к чему. Или я опять чего-то попутал? |
Может быть в механизме реализации событий это и понятно, но по большому счёту пользователю должно быть наплевать как это реализовано в плеере. для него логичнее что: sender - это клип на который нажали и он отослал событие о нажатии на себя..
|
KiL33, что за классы «СоздатьОкно» и «ЗакрытьОкно»? Давно действие стало классом?
|
etc, ты имеешь в виду неправильное именование классов?
ок, пусть CloseWindow будет ButtonClose -- CreateWindow будет NewWindow от этого правда что-то изменится?:) |
Нет, в данном случае нет. Сущность не может иметь название в виде действия или глагола.
|
| Часовой пояс GMT +4, время: 07:58. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.