Что такое список отображения во Flash 10? Массив? Связанный список? - PullRequest
0 голосов
/ 26 апреля 2010

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

while (i < numChildren)
    getChildAt(i)

... для обновления спрайтов.

У меня вопрос, когда я использую getChildAt, это доступ к массиву или вектору, связанному списку или другому? Стоит ли вместо этого хранить ссылки на мои объекты в векторе и проходить через них вместо этого?

Ответы [ 2 ]

4 голосов
/ 26 апреля 2010

если у вас на сцене много элементов, большую часть времени, вероятно, потрачено на их рендеринг.
кроме того, очень мало важно, как реализован дочерний список DisplayObjectContainer, поскольку стоимость вызовов функций на порядки выше, чем доступ Vector с или Array с. Я предполагаю, что на самом деле дочерний список реализован с использованием коллекции C / C ++ вместо того, чтобы нести все накладные расходы из встроенных коллекций ActionScript.

Так что да, хранение всех дочерних элементов в векторе позволит быстрее выполнять поиск, хотя удаление станет дорогим. Даже вставка станет либо более дорогой (если вы переопределите все дочерние методы манипуляции для обновления вектора при внесении изменений и прослушивания для удаления событий), либо более трудной.

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

Greetz
back2dos

1 голос
/ 29 апреля 2010

Согласно документации, getChildAt() - это быстрый поиск в хеш-таблице (по сравнению с getChildByName(), который является (относительно) более медленным обходом связанного списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...