вспышка: для петель, бегущих медленно - PullRequest
5 голосов
/ 01 октября 2008

У меня есть вопрос о циклах во флэш-памяти ....

В игре на плитке у меня есть мини-карта всего уровня. Способ отображения карты - это функция с циклом for в другом цикле for. Он циклически перебирает каждую позицию тайла и прикрепляет фрагмент карты (в основном квадрат 3х3 пикселя), который окрашен в соответствии с тем, что есть тайл. В любом случае, моя проблема в том, что когда уровень становится большим, как плитки размером 50х50, рендеринг карты занимает вечность (до 3 секунд). Есть ли способ исправить это? Или есть другой способ сделать мини-карту ?? Если уровень становится еще больше, это может занять 10 секунд!

Любая помощь приветствуется!

Спасибо, Matt

Ответы [ 4 ]

3 голосов
/ 01 октября 2008

Flash не рендерит плитки очень быстро. Он отлично хранит графику, которая не изменяется в буфере, и быстро отображает этот буфер. Каждый графический объект (или спрайт), добавленный в качестве дочернего элемента к сцене, должен отображаться независимо.

Ваша проблема в том, что flash должен рисовать 50x50 = 2500 плиток в каждом кадре! Даже если они имеют размер 3х3 пикселя, Flash все равно обрабатывает их как отдельные объекты.

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

Некоторые другие предложения могут заключаться в визуализации объектов в более крупных ячейках сетки. Вместо 50х50 начните с 10х10, а затем нарисуйте 5х5 клеток в каждой ячейке. Это, вероятно, ускорит процесс.

Надеюсь, это поможет. Если вы найдете хорошее решение, пожалуйста, напишите!

1 голос
/ 01 октября 2008

Скорее всего, это (как уже упоминалось здесь) ваш цикл медленный. Подсчет 0-2500 действительно быстрый, но если вы будете выполнять тяжелые вычисления в каждой итерации, это сложится. Конечно, не видя код, мы не можем помочь вам с этим. Хотя вы могли бы делать трюки, чтобы сделать этот цикл более плавным (например, запускать его на нескольких кадрах), но если это цикл 3 с, вы, вероятно, многое сможете сделать, чтобы оптимизировать его - возможно, даже до такой степени, чтобы он работал достаточно плавно, так что это не вызовет слишком долгого взлета.

1 голос
/ 01 октября 2008

Да. Сам цикл не займет много времени. Но в каждой итерации я прикрепляю мувиклип из библиотеки. Кстати, он не делает этого на enterFrame, просто когда пользователь нажимает Pause (пробел).

0 голосов
/ 01 октября 2008

Это не займет много времени для запуска самих циклов, но что именно вы делаете внутри каждого цикла? Каковы операции по прикреплению и окраске фрагмента карты?

-Adam

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