2

我有 6 个必须随机连续移动的对象。单独输入每个对象或使用循环寻址所有对象的 1 个输入框是否有效。

var myObjArray:Array = new Array(); // Contains 6 movieclip objects

for(var i=1; i<=6; i++)
{
    var Square:MoveObject = new MoveObject();
    Square.addEventListener(Event.ENTER_FRAME, Square.go);
    myObjArray[i] = Square;
}

public Class MoveObject extends Movieclip{
    public function go(e:Event):void
    {
        this.x++;
    }
}

或者我们在一个 EnterFrame 函数中遍历对象?

4

1 回答 1

4

每个函数调用都有性能损失——这就是人们在代码的关键部分谈论“内联”函数的原因(内联函数内容而不是进行函数调用)。

那么,最好的情况是只添加 1 个侦听器,并在该侦听器中循环所有 6 个对象。另一个提示 - 如果你反向迭代循环,你只调用数组上的 .length() 函数一次,而如果你从 0-length 迭代,for 循环必须每次调用 length 函数来确定条件是否为遇见了。

function enterFrame(e:Event):void
{
  for (var i:int=myObjArray.length-1; i>=0; i--) {
    myObjArray[i].x++;
  }
}

肯定还有其他优化(有人说--i 比i-- 快,但我不确定ActionScript 是否如此)。

当然,在 6 个对象上,这并不是什么大问题,但如果你扩大规模,你肯定会想要使用单个侦听器。

于 2012-11-16T15:14:54.040 回答