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++;
    }
}

または、1 つの EnterFrame 関数でオブジェクトをループしますか?

4

1 に答える 1

4

すべての関数呼び出しにはパフォーマンスのペナルティがあります。そのため、コードの重要なセクションで関数を「インライン化」する (関数呼び出しを行うのではなく、関数の内容をインライン化する) ことについて話しているのはそのためです。

したがって、最良のケースは、リスナーを 1 つだけ追加し、そのリスナーで 6 つのオブジェクトすべてをループすることです。もう 1 つのヒント - ループを逆に反復する場合は、配列に対して .length() 関数を 1 回だけ呼び出しますが、長さ 0 から反復する場合、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 に答える