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

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

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

Регистрация: Jun 2007
Сообщений: 374
По умолчанию Быстродействие bubbling

Возникла задачка.

Есть 2 игровых поля, которые отображаются рядом друг с другом. На каждой - набор человечков. У каждого человечка набор предметов.
Клик по предмету на человечке первого поля вызывает какие-то действия на первом поле (например, рассыпаются монетки). Клик по предмету на человечке второго поля вызывает другие действия второго поля (над человечком появляется всплывающее окно с информацией).

Структура классов такая:

Playground1 -> humans (array) -> Human -> items (array) -> Item
Playground2 -> humans (array) -> human -> items (array) -> Item

Вопрос состоит в том, как наиболее просто и быстро организовать вызов различных функций Playground1 (рассыпать монетки) и Playground2 (открыть всплывающе окно).

Варианты следующие:

1) Сделать интерфейс IPlayground с функцией handleClick и передать ссылку на Playground сначала человечкам, а потом предметам и вызывать эту функцию напрямую из экземпляра Item'ов.

У данного подхода есть минус. Например, когда мы делаем админку человечков. И на AdminPlayground находятся те же самые Human'ы, а функция IPlayground handleClick не нужна, но нужен обработчик события mouseDown. Придется добавить так же handleMouseDown в интерфейс. Получается, что в специфических PlayGround'ах будут дергаться абсолютно все функции интерфейса во всех возможных событиях впустую.

2) Испускать экземплярами Item bubbling события типа "ItemClick", "ItemMouseDown" и подписывать на них обработчики в экземплярах Playground'а. Та же проблема - будет много лишних bubbling событий.

В первом случае намного более громоздкий код с передачей ссылки на интерфейс-контроллер. Во втором случае код гораздо проще, но много лишних bubbling событий.


Стоит ли усложнять архитектуру игры в погоне за быстродействием, или нагрузка от пустых bubbling событий незначительна? Интуитивно мне кажется, что использование всплывающих событий очень сильно вредит производительности.

Есть ли еще изящные решения этой проблемы (например, написать, какой-нибудь свой испускатель событий и др.)?

UPD.
Сделал тест.

Пустая структура:
Playground - > Human - > Item

1) 100к раз испускаем всплывающее событие из Item'а, которое подхватывает Playground - 500мс
2) 100к раз испускаем всплывающие событие из Item'а, которое никем не подхватывается - 300мс
3) Передал Item'у ссылку на Playground и вызвал его пустую функцию 100к раз - 20 мс.

Вопрос в том, как еще можно решить мою задачу менее нагружено по коду и так же быстро, как п. 3) Хотя 100к событий это очень много. Вряд ли какой-либо проект столько испускает, и можно считать эти 100мс лишние погрешностью. Или я ошибаюсь, бывает столько событий?


Последний раз редактировалось s8000_1; 05.11.2010 в 20:38.
Создать новую тему   Часовой пояс GMT +4, время: 05:49.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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