![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2007
Сообщений: 374
|
Возникла задачка.
Есть 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. |
|
|
« Предыдущая тема | Следующая тема » |
|
|