2011-11-29 88 views
1

我有四个不同的影片剪辑的数组:AS3.0:复制影片剪辑从阵列到舞台

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)]; 

现在我想挑上每个影片剪辑第二,将它放在我的舞台。

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(); 

在每个影片剪辑自己的班级我都有他们的电影速度;

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

一切正常,除了伟大的,当动画片段之一是在舞台上和randomNumber得到相同的影片剪辑,从阵列,影片剪辑从舞台上删除并重新添加(在它的起始位置)。

我想要它做的是让movieclip在舞台上,只是添加它的另一个副本,所以舞台上有两个相同的动画片段。

希望有人有这个答案,或解决=) 非常感谢!

回答

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 
} 

但是,您可能还想谷歌blitting和对象池其他更有效的技术。

+0

谢谢!完美的作品。我会看看blitting和对象池=) – Drudoo