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

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

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

Регистрация: Feb 2014
Сообщений: 192
Cool альтернатива пользовательским событиям

Уважаемые знатоки, подскажите такой теоретический вопрос по пользовательским событиям (ПС).
Для создания ПС мы делаем класс, допустим GameOver extends EventDispatcher и в конце игры делаем так
Код AS3:
dispatchEvent(new Event(GameOver.GAME_OVER));
В главном классе мы прописываем
Код AS3:
	var konec:GameOver = new GameOver ();
konec.addEventListener(GameOver.GAME_OVER, konecListener);
1.Не проще ли информировать о конце игры, вызывая к примеру метод Main.konecGame из нужного класса
2.Либо прослушивать флажок о конце игры в EnterFrame, ведь по сути слушатель ПС konec.addEventListener(GameOver.GAME_OVER, konecListener), также потребляет память каждый кадр?
В чем смысл использования ПС простыми словами?
Спасибо

Старый 25.09.2015, 13:44
alexandrratush вне форума Посмотреть профиль Отправить личное сообщение для alexandrratush Найти все сообщения от alexandrratush
  № 2  
Ответить с цитированием
alexandrratush
 
Аватар для alexandrratush

Регистрация: Jul 2013
Адрес: Днепр
Сообщений: 529
Отправить сообщение для alexandrratush с помощью ICQ Отправить сообщение для alexandrratush с помощью Skype™
1. Кривая архитектура приложения.
2. Не оптимально слушать в каждом кадре смену флажка.

Цитата:
ведь по сути слушатель ПС konec.addEventListener(GameOver.GAME_OVER, konecListener), также потребляет память каждый кадр
Кто вам такое сказал? Вы привязали слушатель к событию, и он вызовется, когда будет отправлено это событие.

Старый 25.09.2015, 13:53
Sevil вне форума Посмотреть профиль Отправить личное сообщение для Sevil Найти все сообщения от Sevil
  № 3  
Ответить с цитированием
Sevil

Регистрация: Apr 2014
Сообщений: 9
Представь, у тебя 150 классов, 100 из них надо уведомить об окончании игры, что будешь делать?

Старый 25.09.2015, 14:16
Dmitriy154 вне форума Посмотреть профиль Отправить личное сообщение для Dmitriy154 Найти все сообщения от Dmitriy154
  № 4  
Ответить с цитированием
Dmitriy154

Регистрация: Feb 2014
Сообщений: 192
Цитата:
Сообщение от alexandrratush Посмотреть сообщение
Вы привязали слушатель к событию, и он вызовется, когда будет отправлено это событие.
Для того он и слушатель, что постоянно слушает (как мне кажется, каждый раз в кадр), потребляя немного памяти, для чего же тогда удаляют ненужные слушатели(приемники)? И еще вопрос к вам, в чем заключается кривая архитектура?

Добавлено через 43 секунды
Цитата:
Сообщение от Sevil Посмотреть сообщение
Представь, у тебя 150 классов, 100 из них надо уведомить об окончании игры, что будешь делать?
Т.е. мы регистрируем в каждом из 100 классов по слушателю пользовательского события? Или как мы будем информировать все классы? В чем различие (преимущество) от использования обычного метода класса Main?


Последний раз редактировалось Dmitriy154; 25.09.2015 в 14:29.
Старый 25.09.2015, 14:25
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 5  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
События нужны, для обеспечения принципа слабой связанности компонентов программы, сокрытия кода и инкапсуляции. И это вопрос об архитектуре приложения в целом, а не о конкретном кейсе. Проще в частном случае, не означает проще в целом. В целом может быть сложнее. Код может превратиться в спагетти, т.к. части будут спутаны друг с другом.
Слушатель "не слушает". Это обработчик события - он "обрабатывает" событие, которое ему передаётся.

Старый 25.09.2015, 14:31
Dmitriy154 вне форума Посмотреть профиль Отправить личное сообщение для Dmitriy154 Найти все сообщения от Dmitriy154
  № 6  
Ответить с цитированием
Dmitriy154

Регистрация: Feb 2014
Сообщений: 192
Цитата:
Сообщение от udaaff Посмотреть сообщение
Слушатель "не слушает". Это обработчик события - он "обрабатывает" событие, которое ему передаётся.
Я имею в виду отмену регистрации приемника

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

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
Цитата:
для чего же тогда удаляют ненужные слушатели?
- Для того, чтобы удалить лишние связи, когда они не нужны, чтобы gc мог сделать свою работу.
- Для избежания ошибок. В удалённом объекте, даже если на него не осталось ссылок, слушатели продолжат работать. Из-за этого возможны ошибки этапа выполнения.

Старый 25.09.2015, 14:34
Dmitriy154 вне форума Посмотреть профиль Отправить личное сообщение для Dmitriy154 Найти все сообщения от Dmitriy154
  № 8  
Ответить с цитированием
Dmitriy154

Регистрация: Feb 2014
Сообщений: 192
Цитата:
Сообщение от illuzor Посмотреть сообщение
- Для того, чтобы удалить лишние связи, когда они не нужны, чтобы gc мог сделать свою работу.
- Для избежания ошибок. В удалённом объекте, даже если на него не осталось ссылок, слушатели продолжат работать. Из-за этого возможны ошибки этапа выполнения.
Заброшенные приемники, если их много, очень хорошо расходуют память, а связи это другой вопрос.

Добавлено через 2 минуты
Пока я для себя сделал вывод, что преимущество использования пользовательского события, как сказал Udaaff - для обеспечения принципа слабой связанности компонентов программы, сокрытия кода и инкапсуляции. Т.е. для небольшого приложения допустимо использовать другие способы.

Старый 25.09.2015, 15:29
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 9  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
допустим GameOver extends EventDispatcher
лучше так:
GameOver extends flash.events.Event

Старый 25.09.2015, 16:10
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 10  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Слушатели не "слушают" ничего каждый кадр.
Они просто посредники между двумя классами.

А удаляют их потому, что GC не может удалить ненужный объект из памяти, если к нему привязан слушатель.
Как, в принципе, и говорили выше.

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

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

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


 


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


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