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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.11.2009, 20:05
yorlin вне форума Посмотреть профиль Отправить личное сообщение для yorlin Найти все сообщения от yorlin
  № 11  
Ответить с цитированием
yorlin
 
Аватар для yorlin

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

Вы же пытаетесь эти два пункта объединить в связке Event+EventDispatcher.
Хотели красиво сказать, а получилось как то нелепо, тут скорее всего лучше так: Есть колбаса и есть тот кто ее развозит, а вопрос автора: почему не объединить колбасу и развозчика и получить саморозвозящуюся колбасу. Но и этот пример не подходит, так как вопрос более тонкий, чем колбаса

Старый 01.11.2009, 20:22
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 12  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
саморазвозящаяся колбаса:
Код AS3:
public class MyEventer extends EventDispatcher
{
	private var _event:Event
	public function MyEventer(event:Event) 
	{
		_event = event;
	}
	public function dispatch():void
	{
		dispatchEvent(_event);
	}
}
TommyLee, если это то, о чем ты толкуешь, то можешь поюзать и убедится в неуклюжести такой схемы, упростить она может только очень узкий круг задач

Добавлено через 3 минуты
event это одноразовая посылка, создается по месту исходя из конкретных условий, после доставки и извлечения информации убивается
eventDispatcher универсальный рассылщик таких посылок
какая польза от объедения их в одном флаконе не очень понятно

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

Регистрация: May 2009
Сообщений: 220
1. быстрее создать объект с 5-ю свойствами, чем с 10-тью.
2. если в обработчике нам нужны только данные о событии, то зачем туда пихать методы и свойства EventDispatcher?
колбасу развозит среда выполнения флэш, т.е. FlashPlayer, а не связка из Event+EventDispatcher

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от TommyLee Посмотреть сообщение
Некорректно выразился. Хотел сказать, что функционал подписка-оповещение вынесен в отдельный класс, вместо того, чтобы реализовать его в Event. Для меня это нелогично, но я не профессионал, поэтому хочется узнать причины такого шага, чтобы повысить свой уровень.
Ну вот представьте, у вас есть 2 экземпляра одного и того же класса, они оба диспатчат событие "change" но разница в том, что один из экземпляров его диспатчит 1 раз в минуту, а другой - 10 раз в секунду. А вы просто подписались на событие "change", теперь:
- 599 вызовов обработчика собыя будут "мимо".
- один лиший слушатель при перечислении всех слушателей, которое это событие должно оповестить.
- лишняя логика в обработчике событя по вычислению, а кто же его вызвал.

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

Вот такой например вариант "подписки" на изменеие ширины:
Код AS3:
public function set widthListeners(value:Vector.<Function>):void
{
	for each (var f:Function in value)
	{
		if (_widthListeners.indexOf(f) < 0)
			_widthListeners.push(f);
	}
}
 
public override function set width(value:Number):void
{
	for each (var f:Function in _widthListeners)
	{
		f(super.width, value);
	}
	super.width = value;
}
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 01.11.2009 в 20:38.
Старый 01.11.2009, 21:50
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 15  
Ответить с цитированием
Felicast
 
Аватар для Felicast

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


Последний раз редактировалось Felicast; 01.11.2009 в 21:54.
Старый 02.11.2009, 13:23
TommyLee вне форума Посмотреть профиль Отправить личное сообщение для TommyLee Найти все сообщения от TommyLee
  № 16  
Ответить с цитированием
TommyLee

Регистрация: Sep 2009
Сообщений: 130
Цитата:
Сообщение от wvxvw Посмотреть сообщение
2 экземпляра одного и того же класса, они оба диспатчат событие "change" но разница в том, что один из экземпляров его диспатчит 1 раз в минуту, а другой - 10 раз в секунду.
EventDispathcer может не единожды пройтись по своему списку? То есть отправить приемникам событие не один раз? В описании EventDispathcer не нашел каких бы то ни было настроек диспетчеризации, кроме useCapture в addEventListener.

Felicast, есть недоделанное ТЗ на прораммку для собственных нужд, чтобы реализовать нужно построить архитектуру. Если строить ее без учета модели событий AS3 - как привык, то потом переделывать придется.
з.ы.
Никак не могу отвыкнуть от событийной модели с++ билдера, делфи - с отсутствием подписки и написания кода в самих методах-обработчиках. Здесь это приемники событий, разрозненные по своим объектам и связанные с событием только через EventDispathcer. А он сам - то ли просто механизм подписки-оповещения, то ли такой же объект-подписчик, как и приемники событий..


Последний раз редактировалось TommyLee; 02.11.2009 в 13:28.
Старый 02.11.2009, 13:52
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 17  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Методы обработчики были в AS2 (onEnterFrame, onRelease, итп)
Слава богу что от них ушли.
EventDispatсher - это базовый объект рассылающий события,
Sprite, MovieClip - тоже рассылают события, но они не наследники EventDispatсher, просто реализуют IEventDispatсher
при добавлении addEventListener к какому нибудь объекту-диспатчеру мы сопоставляем событие и ф-цию-обработчик. (внутри это может выгледять, как двумерный хэш список, или хэш список массивов ф-ции.. или еще как..)
В момент наступления события ( внутреннего, вроде клика, или пользовательского в момент вызова dispathEvent) объект проходится по списку слушателей и вызывает ассоциированные ф-ции передавая им возникшее событие (данные)
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 02.11.2009 в 14:02.
Старый 02.11.2009, 14:39
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 18  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от TommyLee Посмотреть сообщение
EventDispathcer может не единожды пройтись по своему списку? То есть отправить приемникам событие не один раз? В описании EventDispathcer не нашел каких бы то ни было настроек диспетчеризации, кроме useCapture в addEventListener.
Так в вашей же построеной схеме диспатчера нет, а есть только событие...

Цитата:
Сообщение от Котяра Посмотреть сообщение
Методы обработчики были в AS2 (onEnterFrame, onRelease, итп)
Слава богу что от них ушли.
EventDispatсher - это базовый объект рассылающий события,
Sprite, MovieClip - тоже рассылают события, но они не наследники EventDispatсher, просто реализуют IEventDispatсher
Откуда такая информация? По документации как раз наследуют а не имплементят.
А по поводу таких обработчиков, как в AS2 - а почему такая увереннось, что это плохо? Я, например, обратил внимание, что в 50% случаев мне этот событийный объект не нужен, т.е. не используется в функции-обработчике. Вообще вуглядит глупо, вызвали функцию с аргументом, и вообще проигнорировали аргумент. Вообще, было бы конечно идеально, если бы разработчик мог сам решать какая сигнатура должна быть у слушателя, но, раз уж у нас арсенал средств ограничен, то уж что есть...
__________________
Hell is the possibility of sanity

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

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Цитата:
Никак не могу отвыкнуть от событийной модели с++ билдера, делфи - с отсутствием подписки и написания кода в самих методах-обработчиках.
ну чтож опишу разницу между делфи, c# и as3 (может что то будет не так, но смысл должен быть понятен):
возьмем обработку клика по кнопке:
делфи:
Код:
procedure TForm1.buttonClick(Sender: TObject);
begin
	MessageDlg('Hello', mtInformation, [mbOk], 0);
end;

{где-то инициализируем кнопку}
myButtun.OnClick := buttonClick;
C#:
Код:
private void buttonClicked(object sender, EventArgs evArgs)
{
	MessageBox.Show("Кнопка была нажата");
}

/*где-то инициализируем кнопку*/
myButtun.Click += new System.EventHandler(buttonClicked);
as3:
Код AS3:
private function clickHandler(event:MouseEvent):void
{
	trace("hello");
}
 
/*где-то инициализируем кнопку*/
myButton.addEventListener(MouseEvent.CLICK, clickHandler);
найдите десять отличий
(единственное в делфи может быть один обработчик (хотя можнт и ошибаюсь), а в as3 сколько угодно)
__________________
я могу стать всем, если только захочу

Старый 02.11.2009, 16:18
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 20  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Откуда такая информация? По документации как раз наследуют а не имплементят.
А по поводу таких обработчиков, как в AS2 - а почему такая увереннось, что это плохо? Я, например, обратил внимание, что в 50% случаев мне этот событийный объект не нужен, т.е. не используется в функции-обработчике. Вообще вуглядит глупо, вызвали функцию с аргументом, и вообще проигнорировали аргумент. Вообще, было бы конечно идеально, если бы разработчик мог сам решать какая сигнатура должна быть у слушателя, но, раз уж у нас арсенал средств ограничен, то уж что есть...
По поводу Sprite имплементит а не наследует - погорячился.. (но не суть важно)
А вот что единая ф-ция обработчик это плохо, я уверен на 100%. дело даже не в передаче эвента в ф-цию обработчик, а в куче неудобств при переопределении одной единственной onRelease, переделегировании событий и.т.п.
да и оставшиеся 50% ( по вашим рассчётам), требующие данных события - это совсем не мало)
__________________
Отряд Котовскага

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

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

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


 


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


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