|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Aug 2011
Адрес: Урал
Сообщений: 10
|
Производительность addEventListener (1 vs много)
Здравствуйте.
1. Есть глобальный листенер (в моем случае MOUSE_MOVE, привязан к stage) отвечает за появление всплывающей подсказки при наведении на объект, существенно снизиться производительность если вместо него будут создаваться такие слушатели в каждом экземпляре класса на сцене? если стоит замарачиваться с единым листенером, то 2. глобальный листенер в зависимости от объекта под ним совершает разные действия (пример кода) stage.addEventListener(MouseEvent.MOUSE_OVER, PopUpWindow); private function PopUpWindow(e:MouseEvent):void { switch (String(e.target.parent)) { case "[object avr_human1_1_mc]": // MC используемый в образце и в классе //п.1// //всегда рисует радиус вокруг объекта когда курсор над ним drawRadius(Human_average_t1._radius); //п.2// if (_universe.contains(e.target.parent)) { //Всплывающее окно только при наведении на созданный экземпляр объекта _popup = new PopUp(false, id, text); // окно addChild(_popup); } break; } //п.3// switch (e.target) { //Всплывающее окно только при наведении на кнопку case _gamemenu._guntowerbtn: _popup = new PopUp(false, baseid, basetext); // окно addChild(_popup); break; } } Есть панель, в ней кнопка, при наведении на кнопку появляется окно с информацией об объекте (работает //п.3// листанера). При клике на кнопку, внутренний листенер в панели добавляет на сцену MC как образец (тот же что будет использоваться при создании экземпляра нашего класса) для визуализации. (работает //п.1// листанера) Тащим образец на место где хотим создать экземпляр нашего класса. Кликаем туда, удаляется MC образец и создается экземпляр класса Human (начинает работать //п.2// листанера) Класс Human наследуется от humanBase, в базовом классе создается _basecontainer (в него добавляется MC по которому фильтруем) добавляемый уже в _universe для отображения. Вопрос: 1. Можно как то по другому фильтровать объекты, а не через string? Т.к. если на сцене есть несколько экземпляров класса, то при данном листенере они все считаются одинаковыми (ведь исп 1 и тот же MC) 2. как получить доступ к _basecontainer в базовом классе (public не помогает) чтоб можно было фильтровать так _universe._basecontainer или подобно. |
|
|||||
Modus ponens
|
Не... в такой ситуации конечно не нужно глобальный. Вообще, нужно исходить из позиции, что глобальный - это всегда плохо, и можно только иногда, когда ну очень хочется / по-другому никак. В вашем примере, вам прийдется переписывать функцию-слушатель каждый раз, когда добавляется / удаляется компонент - чревато ошибками, да и просто много работы.
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Aug 2011
Адрес: Урал
Сообщений: 10
|
я думал что наоборот, глобальный лучше, меньше ресурсов жрет и легче убить. Вычитал вроде в брошюрке адобе по оптимизации
И стараюсь сделать как можно меньше всяких отдельных слушателей (особенно ENTER_FRAME), читаемость страдает, но ради оптимизации... ) Отдельные в базовом классе сделать намного легче. Спасибо. Последний раз редактировалось Marcus; 30.08.2011 в 13:12. |
|
|||||
Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
|
Оптимизация ради оптимизации? Сделайте тесты на вашем конкретном приложении (возможно на вырост). Даст ли ваша оптимизация хоть грамм производительности? Тогда уже принимайте решение.
|
Часовой пояс GMT +4, время: 06:01. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|