1

次の 4 つの異なる MovieClips を含む配列があります。

var myEnemy_1:Enemy_1;
var myEnemy_2:Enemy_2;
var myEnemy_3:Enemy_3;
var myEnemy_4:Enemy_4;

var enemyArray:Array = [new Enemy_1(stage), new Enemy_2(stage), new Enemy_3(stage), new Enemy_4(stage)];

ここで、1 秒ごとにムービークリップを選択してステージに配置したいと考えています。

var myTimer:Timer = new Timer(1000, 1000);
var randomNumber:int;

myTimer.addEventListener("timer", timedFunction);

function timedFunction(myTime:Event):void {

randomNumber = Math.random()*4;
stage.addChild(enemyArray[randomNumber]);
enemyArray[randomNumber].x = stage.stageWidth;
enemyArray[randomNumber].y = Math.random()*(stage.stageHeight - 50) + 10;
enemyArray.push(enemyArray[randomNumber]);

}

myTimer.start();

MovieClips 独自のクラスのそれぞれで、私はそれらを高速で動画にしています。

x -= Math.random()*4+1;

ムービークリップの 1 つがステージ上にあり、randomNumber が配列から同じムービークリップを取得する場合を除いて、すべてがうまく機能します。ムービークリップはステージから削除され、再び (開始位置に) 追加されます。

私がやりたいことは、ムービークリップをステージ上に置き、そのコピーをもう 1 つ追加するだけで、ステージ上に 2 つの同一のムービークリップがあることです。

誰かがこれに対する答え、または回避策を持っていることを願っています =) どうもありがとう!

4

1 に答える 1

3

同じクラスの新しいコピーが本当に必要な場合は、新しいインスタンスを作成する必要があります。そう:

var enemyArray:Array = [Enemy_1, Enemy_2, Enemy_3, Enemy_4];

function timedFunction(myTime:Event):void { 
   randomNumber = Math.random()*4; 
   var enemy:AbstractEnemy = new enemyArray[randomNumber](stage);
   stage.addChild(enemy);
   enemy.x = stage.stageWidth;
   enemy.y = Math.random()*(stage.stageHeight - 50) + 10;
   someOtherArray.push(enemy);  //don't want to add this to your array of Class definitions
} 

ただし、他のより効率的な手法については、ブリッティングとオブジェクト プーリングをグーグルで検索することもできます。

于 2011-11-29T17:44:55.907 に答える