![]() |
Глобальный Enter Frame
Как лучше реализовать ентерфрейм, чтоб была возможность добавлять функции в которых есть анимация. Сделал так, но мне кажется это медленно:
Код AS3:
|
Да вроде нормально. Именно перебор сильно не улучшить. Можно for .. in попробовать, можно сделать список вместо вектора (как бонус вставка/удаление быстрее), но до 1000 длины вектора нереально разницу увидеть. Можно написать функцию удаления - это даст повод подумать над Dictionary вместо или вместе с вектором.
|
Цитата:
|
каждую анимацию имплементить от интерфейса с function Tick():void;, например.
создание анимации проводить в какой-нибудь AnimationSystem, которая будет получать игровой Tick от игрового мира World, скажем. Собирать анимации в Vector.<Animation>(); Код AS3:
|
А вот это всё каждый фрейм происходит?
Код AS3:
|
Цитата:
А сам перебор (сравнение i <, инкремент i++, обращение к элементу массива) - ни как не больше времени и памяти жрёт чем непосредственный вызов всех функции Tick() Т.е. это не место для оптимизаций. Где место для оптимизаций? Это удаление функции могло бы быть, но у Вас просто нет такого метода :) Цитата:
Код AS3:
|
Цитата:
Добавлено через 8 минут Интересно, что быстрей такой подход как Frost47rus написал где будут через интерфейс дёргаться методы или как у меня с передачей всего метода в ентерфрейм или это совсем не важно что так, что так? |
Разве for..in не намного медленней, чем другие циклы?
|
так, нужно будет сделать класс который измеряет скорость работы отдельных кусков кода(но это уже другая история), действительно for each ведь медленее while, но используя for each в данном случае стают не нужными private var _funcCount:int = 0; private var _oldFuncCount:int = 0; и все манипуляции с ними отпадают.
В общем-то почти всё что хотел - узнал, так как по любому прийдётся перебирать вектор с анимациями каждый кадр то моё решение удовлетворяет. |
Цитата:
если удаление функции происходит внутри другой или той же вызываемой функции (хотя предыдущий подход тоже не спасёт ситуацию) Цитата:
Тут народ пытался определить что же лучше (с переменным успехом): http://stackoverflow.com/questions/1...ce-in-as3-flex Цитата:
Пользуйтесь переменными. Вот пример без foreach, если религия не позволяет: Код AS3:
Код AS3:
|
| Часовой пояс GMT +4, время: 23:26. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.