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

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

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

Регистрация: Aug 2011
Адрес: Урал
Сообщений: 10
Question Производительность addEventListener (1 vs много)

Здравствуйте.
1. Есть глобальный листенер (в моем случае MOUSE_MOVE, привязан к stage) отвечает за появление всплывающей подсказки при наведении на объект, существенно снизиться производительность если вместо него будут создаваться такие слушатели в каждом экземпляре класса на сцене?

если стоит замарачиваться с единым листенером, то
2. глобальный листенер в зависимости от объекта под ним совершает разные действия (пример кода)

stage.addEventListener(MouseEvent.MOUSE_OVER, PopUpWindow);
Код AS3:
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 или подобно.

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

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

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

Регистрация: Aug 2011
Адрес: Урал
Сообщений: 10
я думал что наоборот, глобальный лучше, меньше ресурсов жрет и легче убить. Вычитал вроде в брошюрке адобе по оптимизации
И стараюсь сделать как можно меньше всяких отдельных слушателей (особенно ENTER_FRAME),
читаемость страдает, но ради оптимизации... )
Отдельные в базовом классе сделать намного легче.
Спасибо.


Последний раз редактировалось Marcus; 30.08.2011 в 13:12.
Старый 30.08.2011, 13:24
Hidest вне форума Посмотреть профиль Отправить личное сообщение для Hidest Найти все сообщения от Hidest
  № 4  
Ответить с цитированием
Hidest
 
Аватар для Hidest

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
Оптимизация ради оптимизации? Сделайте тесты на вашем конкретном приложении (возможно на вырост). Даст ли ваша оптимизация хоть грамм производительности? Тогда уже принимайте решение.

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

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

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


 


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


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