Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.10.2009, 15:00
TommyLee вне форума Посмотреть профиль Отправить личное сообщение для TommyLee Найти все сообщения от TommyLee
  № 1  
Ответить с цитированием
TommyLee

Регистрация: Sep 2009
Сообщений: 130
По умолчанию Архитектура событийной модели. Варианты подписки на события.

Цитата:
Сообщение от Felicast Посмотреть сообщение
так разберемся:
чтобы сгенерировать событие нужно вызвать метод dispatcheEvent, куда передать наше событие.
при клике флеш сам вызывает метод dispatcheEvent у необходимого объекта с необходимым событием.
никто не мешает вам самому вызвать событие клика. для этого нужно просто создать экземпляр MouseEvent с типом "click". и вызвать метод dispatcheEvent
+его пример EventDispatcher.
Так же читал темы на форуме и переводного Мука. Пришел к тому, что вариантов подписки может быть несколько:
1. Прямая подписка на событие:
объекты(ы)EventDispatcher --> событийный объект(Event,..)
2. Косвенная подписка:
объект(ы)EventDispatcher -->объектыEventDispatcher --> событийный объект(Event,.)

Только вот смысл 2го варианта не пойму.


Последний раз редактировалось wvxvw; 31.10.2009 в 19:06.
Старый 31.10.2009, 19:04
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Второй вариант - это всплывающие события?
Если да, то это просто часный случай обычных событий, собственно, сделано для удобства, когда, например, вместо того, чтобы добавлять 1000 слушателей к дочерним объектам, вы добавляете 1 к родительскому и в нем определяете кто из детей вызвал событие. Это получается дешевле в смысле производительности / количества написаного и скомпилированого кода.
__________________
Hell is the possibility of sanity

Старый 31.10.2009, 19:24
TommyLee вне форума Посмотреть профиль Отправить личное сообщение для TommyLee Найти все сообщения от TommyLee
  № 3  
Ответить с цитированием
TommyLee

Регистрация: Sep 2009
Сообщений: 130
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Второй вариант - это всплывающие события?
Пока нет практического опыта, так что ничего сказать не могу. А в Муке зациклился на главе о событиях не отображаемых - дальше не читал.
Возможен ли такой вариант: на панеле есть несколько элементов, которые должны изменяться в результате щелчка по панели; все элементы панели подписываются на событие щелчка по ней?
Или такое невозможно и всем элементам нужно подписываться напрямую?

Старый 31.10.2009, 20:55
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 4  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
вместо того, чтобы подписывать все элементы панели на клик. Можно создать класс MyButton(унаследованный, например, от Sprite), в котором определить переменную id как идентификатор нажатой кнопки.
А на панели поставить слушатель на клик, обработчик которого может выглядеть подобным образом:
Код AS3:
private function parentHandler(e:MouseEvent):void {
	if (e.eventPhase == 2) return;
	var myButton:MyButton= e.target as MyButton;
	switch(myButton.id)
	{
		case 0:
		myButton.x = 200;
		break;
 
		case 1:
		myButton.x = 100;
		break;
	}
}
Да, и вот еще пример.

Старый 31.10.2009, 22:00
TommyLee вне форума Посмотреть профиль Отправить личное сообщение для TommyLee Найти все сообщения от TommyLee
  № 5  
Ответить с цитированием
TommyLee

Регистрация: Sep 2009
Сообщений: 130
Значит вариант реалистичен.. В модели я не могу понять такую вещь: зачем нужен "промежуточный" класс EventDispatcher, когда можно было бы подписываться прямо в событийном объекте? Например, получать ссылку на событийный объект, а затем вызывать метод регистрации? Изначально бы сделать в Event подобный функционал, а потом наследовать со всеми характеристиками события..

Старый 31.10.2009, 22:39
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 6  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
вы, похоже, плохо понимаете что такое Event и EventDispatcher.
Event - это класс содержащий данные. в нем не реализовано никакой логики. только данные: тип события, кто послал и многие другие.
за всю логику отвечает класс EventDispatcher. он реализует подписку на событие, отписку, рассылку события.
в который раз советую вам не зарываться в теорию. а запустить любимый FlashDevelop. создать простенький примерчик и самому воочию насладиться величием событийной модели.
__________________
я могу стать всем, если только захочу

Старый 01.11.2009, 15:56
TommyLee вне форума Посмотреть профиль Отправить личное сообщение для TommyLee Найти все сообщения от TommyLee
  № 7  
Ответить с цитированием
TommyLee

Регистрация: Sep 2009
Сообщений: 130
Цитата:
Сообщение от Felicast Посмотреть сообщение
вы, похоже, плохо понимаете что такое Event и EventDispatcher.
Да понимаю я разницу: в Event плеер ложит характеристики события, а EventDispatcher реализует механизмы подписки и оповещения. Не могу только понять, зачем нужен посредник. От этого какое-то "проскальзывание" в понимании модели..

Цитата:
Сообщение от Felicast Посмотреть сообщение
в который раз советую вам не зарываться в теорию. а запустить любимый FlashDevelop. создать простенький примерчик и самому воочию насладиться величием событийной модели.
Ничего не могу с собой поделать. Если не понимаешь механизм того, что своял - какое же может быть наслаждение?

Старый 01.11.2009, 17:33
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
EventDispatcher - это не посредник, это набор методов, которые реализуют подписку и оповещение, если вам нравится это каждый раз писать самому в каждом классе, который будет подписывать слушателей и оповещать их - дело ваше, только это в итоге выльется в то, что вы будете очень много работать над чем-то, что уже реализовано и работает вполне себе хорошо.
__________________
Hell is the possibility of sanity

Старый 01.11.2009, 19:10
TommyLee вне форума Посмотреть профиль Отправить личное сообщение для TommyLee Найти все сообщения от TommyLee
  № 9  
Ответить с цитированием
TommyLee

Регистрация: Sep 2009
Сообщений: 130
Цитата:
Сообщение от wvxvw Посмотреть сообщение
EventDispatcher - это не посредник
Некорректно выразился. Хотел сказать, что функционал подписка-оповещение вынесен в отдельный класс, вместо того, чтобы реализовать его в Event. Для меня это нелогично, но я не профессионал, поэтому хочется узнать причины такого шага, чтобы повысить свой уровень.

Старый 01.11.2009, 19:50
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 10  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
Цитата:
Сообщение от TommyLee Посмотреть сообщение
поэтому хочется узнать причины такого шага, чтобы повысить свой уровень.
1. Что быстрее произвести 5 палок колбасы или 10? Очевидно, что 5-ть.
2. Допусти вам в месяц хватает 5-ти палок колбасы, чтобы наесться. Что делать с другими 5-тью? Положить на склад и заморозить (чтобы не протухли). В итоге имеем нерациональное использование рабочей площади и колбасу с ухудшенным вкусом и потерянными полезными качествами после разморозки.

Вы же пытаетесь эти два пункта объединить в связке Event+EventDispatcher.

Создать новую тему Ответ Часовой пояс GMT +4, время: 11:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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