![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
если в коде, где используется класс события, вы не импортируете этот самый класс события - приложение просто не откомпилируется.
|
|
|||||
|
Регистрация: Sep 2009
Сообщений: 130
|
Значит, событийные объекты создаются средой флеш. Ясно, меньше ошибок программиста. На каждое событие только один экземпляр событийного объекта?
|
|
|||||
|
listener
|
Объект флэш-события создается, видимо, если есть хоть один его слушатель, иначе какой в нем смысл? На этапе компиляции в ролик встраивается код, позволяющий этих слушателей создавать. А импорты просто указывают, что это будет за код.
Цитата:
|
|
|||||
|
Регистрация: Sep 2009
Сообщений: 130
|
Цитата:
Цитата:
Добавлено через 34 секунды Цитата:
|
|
|||||
|
Modus ponens
|
Цитата:
- склонировали объект события. - записали в него новые target, currentTarget, отдали слушателю. - если слушатель "остановил" событие, прекращаем его раздавать остальным слушателям. (В случае с всплывающими событиями, событие можно остановить отдельно, чтобы не всплывало дальше и отдельно, чтобы слушатели того же уровня его не получили). Да, но с другой стороны, если вам эта реализация кажется избыточной (мне иногда она кажется избыточной ) То никто не мешает переопределить методы типа dispatchEvent() и раздавать не клонированое событие, а один и тот же объект, ну или вообще забить на события и просто вызывать функцую слушателя, если в событиях как таковых нет необходимости.
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 29.10.2009 в 13:52. |
|
|||||
|
listener
|
Хм.. ну, если мувиклип способен реагировать на нажатие мыши, а он способен, код этого класса как раз и создает слушателя нажатий мыши, только происходит это на автомате, хотите вы этого или нет, ибо такой класс. Среда ему эти события будет исправно предоставлять. В вашей терминологии "импорт события" это импорт класса, создающего слушателя данного события. А дальше - уже логика обработки. И тут уже неважно, есть ли слушатели этого события в последующей цепочке, то бишь подписался кто-то на событие клипа или не подписался.
Последний раз редактировалось alexcon314; 29.10.2009 в 14:00. |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 130
|
Цитата:
Я пока путаюсь в терминологии, т.к. у перевода Мука и в руководстве она разная, к тому же не уверен, что правильно понял событийную модель. Я имел вот что: например, import MouseEvent. Теперь, если среда флеш получит мышиное событие, она создаст экземпляр класса MouseEvent. Который, в свою очередь, пойдет всем подписчикам. Последний раз редактировалось TommyLee; 29.10.2009 в 18:00. |
|
|||||
|
флеш получит мышинное событие в любом случае. в сотый раз говорю: ему абсолютно плевать, слушает кто его или нет. и даспатчЕвент сработает. просто если подписчиков нет, то никуда это событие и не пойдет.
насчет import MouseEvent: это тоже ни на что не влияет. эта строчка нужна для того чтобы вы в коде могли использовать класс MouseEvent (к слову сказать, этот класс нативный (находится в самом плеере) зы: вчитываясь с комменты, создается такое впечатление, что каждый говорит о своем UPD: даже не пожалел времени набросал как примерно работает EventDispatcher (реализация может и не такая, но идея должна быть понятна) public class EventDispatcher { private var _events:Dictionary; public function EventDispatcher() { _events = new Dictionary(); } public function addEventListener(eventType:String, eventHandler:Function):void { var eventsList:Array = _events[eventType]; if (!eventsList) { eventsList = new Array(); _events[eventType] = eventsList; } eventsList.push(eventHandler); } public function dispatchEvent(event:Event):void { var eventsList:Array = _events[eventType]; if (eventsList) { for each (var handler:Function in eventsList) { handler(event); } } } }
__________________
я могу стать всем, если только захочу Последний раз редактировалось Felicast; 29.10.2009 в 20:02. |
|
|||||
|
Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
|
Цитата:
Диспетчер (в том числе то, что вы называете "среда") рассылает события всем подписчикам, вне звависимости от того, произведён ли в их коде импорт соответствующего класса. А то, на какое событие слушатель подписан, определяется не классом события, а строкой, которая была передана в качестве параметра type метода addEventListener (и доступна через Event.type). Например, мы можем подписаться на MouseEvent.MOUSE_DOWN, а параметр метода-слушателя объявить как e:Event. И события будут приходить всё равно, более того, не возникнет никаких ошибок (так как MouseEvent наследует Event). Мы просто не сможем получить доступ к свойствам и методам, определённым непосредственно в MouseEvent (localX, например). Последний раз редактировалось SamFR; 29.10.2009 в 20:05. |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|