Обновление нескольких спрайтов - рекомендации по производительности AS3 - PullRequest
0 голосов
/ 02 мая 2010

Внутри контейнера "BubbleContainer" у меня есть несколько "Bubble sprites". Графический объект каждого пузыря (круг) обновляется по событию таймера.

Допустим, у меня есть 50 пузырьковых спрайтов, и радиус каждого круга должен быть обновлен математической формулой. Как мне организовать эту логику?

  1. Как обновить все спрайты Bubble внутри BubbleContainer? (я должен вызвать функцию bubble.update () или сделать временную ссылку на графический объект?)

  2. Куда мне положить математическую логику? (как статические функции?)

Ответы [ 2 ]

1 голос
/ 10 мая 2010

На вашем месте я бы больше волновался о том, как эффективно выполнять математику, а не обмениваться данными, потому что там вы теряете много времени.

Мой совет на этот счет будет:

Выполните все вычисления в BubbleContainer (или где-либо еще, но в одном месте, а не внутри каждого объекта)

  • Такие вещи, как Math.PI / 180

  • Precalc 2 массива / вектора синуса и значения косинуса (быстрее получить
    они из массива, а не
    каждый раз вызывая Math.sin / Math.cos)

  • Передать результат пузырьковому спрайту. за 1 звонок (как указала Кристи)

  • Создать функцию, которая принимает ввод параметры, все математические и возвращает ответ.

    Для каждого набора входных данных (на каждом калибровка этой функции):

    Сначала посмотрите, если ответ был рассчитан раньше, если он был извлечен из ответа словарь.

    если не подсчитать и добавить в словарь ответов.

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

Быстрый пример, не оптимизированный, просто чтобы дать вам представление:

function multiply(x:int,y:int):int{ 

var retValue:int; 

var key:String=String(x)+String(y);

if (answers[key]){ retValue=answers[key];} 

else{ retValue=x*y;  answers[key]=retValue;} 

return retValue;

}
1 голос
/ 03 мая 2010

Сделайте как можно меньше звонков. Статика, которую я слышал, медленнее, чем методы класса.

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