0

as3を始めたばかりですが、配列とオブジェクト(movieclip)にほとんど問題がありません。まず、オブジェクトを配列に追加したい場合は、使用array.push(object)しませんか?必要に応じて、で削除してarray.splice(index, 1)ください。それでは、私のコードがこのようなものである場合、配列に10個のオブジェクトだけが必要な場合は、配列へのオブジェクトの追加を停止してはどうでしょうか。

private function RandomEnemy():void {
    var enemy:Enemy = new Enemy(RandomRange(700, 1000), 350);
    enemy.addEventListener(Event.REMOVED_FROM_STAGE, RemoveFromArray);
    layerChar.addChild(enemy);
    enemies.push(enemy);
}

private var remaining:int = 10;
private function RemoveFromArray(e:Event):void {
    removeEventListener(Event.REMOVED_FROM_STAGE, RemoveFromArray);
    var index:int = enemies.indexOf(Enemy(e.currentTarget), 0);
    enemies.slice(index, 1);
    remaining--;
    trace(remaining);
    if (remaining==0) {
        //stop the adding object in array
    }
}

英語が下手で申し訳ありませんが、as3とflashを使ったプログラミング方法がまだわかりません。

4

3 に答える 3

1

配列の長さプロパティをチェックして、その中にいくつのアイテムが含まれているかを確認できます。

enemies.length

その後、その値に基づいて、好きなことを行うことができます。コードを見ると、配列から削除する前に、配列内に項目があるかどうかを確認するために、すべてを if ブロックに入れる必要があるようです。

おそらく、このようなものがあなたが望むものですか?

private function RemoveFromArray(e:Event):void {
    // not quite sure what you were trying to do with this line...
    removeEventListener(Event.REMOVED_FROM_STAGE, RemoveFromArray);

    // check to see if there are any items in the enemies array to remove
    if (enemies.length > 0){
        var index:int = enemies.indexOf(Enemy(e.currentTarget), 0);
        //enemies.slice(index, 1);
        // splice() is what you may actually want, as it adds/removes elements from the array
        enemies.splice(index, 1);
    } else {
        trace("No more items in enemies array.");
    }
}
于 2013-02-01T09:38:50.850 に答える
0

1)配列の周りにカスタムラッパーを作成して、配列に何かを追加する前に配列の長さをチェックすることもできます

2) Vector クラスを見てください。その長さを修正できます。多くの場合、配列よりも効率的です。

3) 削除したいオブジェクトが配列の先頭または末尾にある場合、スプライスは非常にコストがかかるため、スプライスを使用しないでください。ポップまたはシフトを使用してください。

于 2013-02-01T11:55:34.850 に答える
0

最も簡単な解決策は、オブジェクトを追加する前に配列に 10 個の要素があるかどうかを確認することだと思います。

if (enemies.length < 10){
    layerChild.addChild(enemy);
    enemies.push(enemy);
}

spliceまた、スペルを間違えたようですenemies.slice(index, 1)。皆さんが初心者であることは承知していますが、混乱を避けるために、できる限り少ない機能に固執するのが最善です。

ニールの意見から外れると、ベクターは一般的に配列よりも優れていますが、ベクターの長さを固定しないでください。10 個の要素しか持たないわけではないためです (コンフォート ゾーンから逸脱したい場合を除きますが、効率は重要ではありません)。ここでは問題ではありません)。この場合も効率は問題にならないので、 splice を使用してください。

于 2013-02-01T16:02:23.527 に答える