更新多个Sprite - AS3性能最佳实践

时间:2010-05-02 11:26:50

标签: flash actionscript-3 performance oop

在容器“BubbleContainer”中,我有多个“Bubble sprites”。 每个气泡的图形对象(圆圈)都会在计时器事件中更新。

假设我有50个泡泡精灵,每个圆的半径应该用数学公式更新。我该如何组织这个逻辑?

  1. 如何更新BubbleContainer中的所有Bubble精灵? (我应该调用bubble.update()函数还是对图形对象进行临时引用?)

  2. 我在哪里放数学逻辑? (作为静态函数?)

2 个答案:

答案 0 :(得分:1)

尽可能少地打电话。我听到的静态比类方法慢。

答案 1 :(得分:1)

如果我是你,我会更加担心如何有效地进行数学运算而不是传递数据,因为你会浪费大量的时间。

我对此的建议是:

对BubbleContainer(或其他任何地方,但在一个地方而不是在每个对象内)进行所有计算

  • 像Math.PI / 180

  • 这样的预处理事项
  • Precalc 2阵列/正弦和正弦矢量 余弦值。(得到的速度更快 他们来自阵列而不是 每次调用Math.sin / Math.cos)

  • 将结果传递给Bubble精灵 在一次通话中(正如克里斯蒂指出的那样)

  • 创建一个接受输入的函数 参数,全部数学和 回答答案。

    对于每组输入(在每个输入上) 这个函数的cal):

    首先看看是否 答案是在之前计算的,如果是的话 是从答案中检索出来的 字典。

    如果不计算并将其添加到 回答字典。

    在字典中创建一个条目 将输入值作为键和 作为价值回答。这样你就是 创建答案缓存。对于 复杂的,反复的计算与 输入数量相对较少 它的参数(如你的情况) 更快地检索你的答案 已经从字典中计算出来了 而不是做计算 再次。如果您使用数组而不是字典,我相信它会更快......

快速示例,未经优化,只是为了给您一个想法:

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;

}