![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
|
Здравствуйте. У меня такой вопрос:
Есть множество объектов класса, расширяющего DisplayObject. Их надо покадрово анимировать. Так вот, есть 2 варианта того, как это можно сделать: Вариант 1: Засунуть событие Event.ENTER_FRAME внутрь этого класса, по которому обновлять позицию элемента. Вариант 2: Создать массив из этих элементов и по событию Event.ENTER_FRAME уже в главном классе, в цикле запускать метод update() для каждого элемента. Какой вариант более эффективный в плане потребления ресурсов компьютера? |
|
|||||
|
Второй вариант
__________________
http://www.chessmax.ru |
|
|||||
|
Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
|
Можно поподробнее почему второй? Просто мне хотелось бы понять что тут влияет на эффективность.
Во втором варианте ведь ещё каждый раз идёт обращение к элементам массива, что тоже в свою очередь уменьшает производительность. Последний раз редактировалось Parez; 04.12.2011 в 20:13. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Не на столько, на сколько в первом случае.
Да, второй вариант намного лучше. |
|
|||||
|
Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
|
Спасибо.
|
|
|||||
|
рассылка ENTER_FRAME всем подписантам это тоже перебор списка, т.е. в обоих случаях так или иначе массив,
но в случае с подпиской каждого экземпляра к вызову update добавляются затраты на создание Event'ов на каждого слушателя имхо разница не велика, почувствовать можно только на достаточно большом количестве объектов и то если сам update не особо затратный |
|
|||||
Вариант 2: Создать массив из этих элементов и по событию Event.ENTER_FRAME уже в главном классе, в цикле запускать метод update() для каждого элемента. А вот если подписка-отписка идет часто - то на перстройку массива будет теряться много времени, по сравнению с EventDispatcher. Если реализовывать список на Dictionary - тогда подписка-отписка будет быстрее, чем у EventDispatcher, но диспетчеризация замедлится, хотя останется быстрее EventDispatcher-овской. Да, есть еще такая интересная вещь, как отписка/подписка событий внутри листенера - если ее поддержать при самопальном диспетчинге - будет медленнее в любом случае - ибо потребуется копировать массив всех слушателей (не уверен, но вроде как, можно извернуться и не делать копирование при отсутствии отписки внутри листенера). Последний раз редактировалось expl; 04.12.2011 в 22:41. |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|