1

ライブラリに「ブロック」と呼ばれるクラスが複数回複製され、次のような配列に追加されるムービークリップがあるように、コードをセットアップしました。

function makeblock(e:Event){
newblock=new block;
newblock.x=10;
newblock.y=10;
addChild(newblock);
myarray[counter] = newblock; //adds a newblock object into array
counter += 1;
}

次に、現在原始的な方法で問題を処理するループがあります。

    stage.addEventListener(Event.ENTER_FRAME, gameloop);
    function gameloop(evt:Event):void {
        if (moveright==true){
            myarray[0].x += 5;
            myarray[1].x += 5;
            myarray[2].x += 5
              -(and so on)-

私の質問は、以前に追加されたオブジェクトとともに、配列に複製された新しいオブジェクトのフレームごとに x、y 値を変更する方法です。もちろん、自分で書き出すよりも洗練された方法で... array[0].x += 5、array[1]、array[2]、array[3] など。

理想的には、これを1つの配列に対して500以上の配列オブジェクトにしたいので、明らかに個別に書きたくありません。また、パフォーマンスと一致させる必要があるため、forループまたは何かを使用してループします配列全体を通して各 x += 5 を移動してもうまくいきませんか? とにかく、誰かが素晴らしいアイデアを持っているなら!

4

2 に答える 2

3

100個のオブジェクトを移動する必要がある場合は、それらを移動する必要があります。代替手段はありません。

しかし、パフォーマンスを節約するために実際にできることは、ソリューション自体を最適化することです。私から数セント:

最後に、マイクロ最適化とそれらについて考えることに時間を無駄にしないように注意したいと思います。

于 2012-12-03T04:51:39.457 に答える
0

いくつかのコンテナ スプライトを使用して、作成時にブロックを追加できます。

// Some init place
var blockContainer:Sprite = new Sprite();
addChild(blockContainer);

ブロックを作る:

function makeblock(e:Event){
    newblock=new block;
    newblock.x=10;
    newblock.y=10;
    // Add the block to the container
    blockContainer.addChild(newblock);
    myarray[counter] = newblock; //adds a newblock object into array
    counter += 1;
}

そしてゲームループ:

stage.addEventListener(Event.ENTER_FRAME, gameloop);

function gameloop(evt:Event):void {
    if (moveright==true){
         blockContainer.x += 5;
    }
    // etc...
}

この方法では、オブジェクトを 1 つだけ移動する必要があります。もちろん、この方法は、すべてのブロックが同じ方向に移動する必要がある場合にのみ機能します。ところで、for ループも同じように機能します。500 回の繰り返しは意味がありません。唯一のパフォーマンスの問題はレンダリングだけである可能性が高く、ブロックを移動する必要があるため、選択した方法に関係なく発生します (つまり、動きの変化をレンダリングする必要があるため、ここでのパフォーマンスは実際には問題ではありません。唯一の問題は、独自のコーディングの利便性のためにどのようにムーブメントを実装するかです)。

于 2012-12-03T04:57:47.577 に答える