Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Эффективность событий в as3 (http://www.flasher.ru/forum/showthread.php?t=137675)

Division 19.03.2010 18:23

Эффективность событий в as3
 
Привет. Возможно ли избежать копирования объекта события при повторном dispatchEvent?
Пишу сейчас движок игры и думаю, а не заменить ли стандартный механизм событий на свой. Никак не могу решить, оправдано ли это. События используются везде и много. И мне кажется что столь многочисленное копирование объектов событий выглядит совсем некрасиво.

Может кто писал аналог стандартных событий, что можете сказать насчёт производительности? Что-то мне подсказывает, что они реализованы на более низком уровне и должны работать достаточно шустро, но это чёртово копирование не даёт мне покоя... (:

wvxvw 19.03.2010 18:47

Писал.
Копирования, к сожалению, нельзя избежать :( У событий есть какое-то "тайное" свойство типа handled, и если мы один раз использовали событие, то нативный диспатчер наотрез отказывается его диспатчить дальше.
В теории, можно было бы оверрайдить clone() так:
Код AS3:

public override function clone():Event { return this; }

Но, факир был пъян, и фокус не удался...
Альтернативы - есть:
Вот тут есть маленький тест по разным вариантам:
http://code.google.com/p/hxhsl/sourc...vn/trunk/tests
(скачайте gif-ы и посмотрите). Самая распроатраненная альтернатива - то, что Robert Panner написал - (в тесте фигурирует как DeluxeSignal). На мой взгляд - там много лишнего + типизация какая-то мнимая.
Свой вариант я выкладывал в блоге. Есть еще и похожий вариант:
http://code.google.com/p/e4xu/source...emplate.as.fdt
(это темплейт к FD, но там еще надо подумать, как его сделать по-удобнее).

Да, а вот тут еще было интересное обсуждение по этому поводу:
http://n2.nabble.com/HSL-Connection-...td4114720.html

Division 19.03.2010 19:23

Понятно, спасибо, почитаю.

iflamberg 19.03.2010 20:35

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

Division 20.03.2010 00:03

У меня довольно интересная система, почитать о ней можно тут.
Есть игровой объект, на него вешаются декораторы. Сцена может посылать события всем своим объектам(update, к примеру), и это событие приходит к заинтересованным декораторам. Декораторы могут подписываться/отписываться от событий.
Также сцена может послать своим объектам событие типа "откликнуться тем кто находится в заданной области" - в объект события будут записаны ссылки на подходящие игровые объекты. Тут то и возникает засада с копированием события.

А смысл всего этого огорода - расширять функционал без наследования. Мне очень понравилось (:


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

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