2014-10-31 36 views
1

我在舞台上有一堆实例名称为ball1 - ball200的movieclip。我希望我没有创建一个数组,并手动将所有的实例名称设置成阵列使用for循环将movieClip的实例名称推送到数组中

ballArray = [ball1, ball2,ball3, etc]; 

我试图通过让for循环周期,每个实例名称添加到我的数组像这样:

function createTheArray():void{ 
    for(var i:int = 1; i < 20;i++){ 
     ballArray.push(ball + i); 
     trace(newArray[i]) 
    } 
} 

但我一直在找回未定义的数组索引。它也告诉我,我不知道“球”是什么。你将如何使用实例名称的一部分,并将其与循环的索引值结合使用。所以第一次通过你得到ball1作为你的数组的第一个索引值?

回答

2

200个球拖出到时间线,并给他们实例名称听起来并不像很多的乐趣!

最好的选择:

右击球对象,并转到属性中,单击“为ActionScript导出”,并给它一个唯一的名称。 (让我们把它叫做MyBall在这个例子中)时间轴中的代码

做到这一点:

var ballArray:Vector.<MyBall> = new Vector.<MyBall>(); 
    for(var i:int=0;i<200;i++){ 
     ballArray.push(new MyBall()); 
     addChild(ballArray(ballArray.length-1)); 
    } 

一个最好的选择

,如果你所有的球都是在时间轴上已经,你仍然可以做从上面的步骤(导出为actionScript并给它起一个名称),但执行以下代码:

var ballArray:Vector.<MyBall> = new Vector.<MyBall>(); 
var i:int = numChildren; 
while(i--){ 
    if(this.getChildAt(i) is MyBall) ballArray.push(this.getChildAt(i) as MyBall); 
} 

另一个选项

如果你的球都不尽相同库对象,如果你把他们都在一个影片剪辑容器的唯一对象(比方说你给它的实例名称ballContainer,你仍然可以使用此代码所以你不必给他们实例名称:

var ballArray:Vector.<DisplayObject> = new Vector.<DisplayObject>(); 
var i:int = ballContainer.numChildren; 
while(i--){ 
    ballArray.push(ballContainer.getChildAt(i)); 
} 
+0

如果你不知道,'VECTOR'是基本相同'Array'除了在阵列中的所有项目必须是指定种类项目 – BadFeelingAboutThis 2014-10-31 19:13:40

1

可以使用括号中的字符串来获取对象的属性。在你的情况下,你的对象被称为这个。所以你的球的语法是this["ball"+index]。 试试这个:由字符串

function createTheArray():void{ 

    for(var i:int = 1; i < 20; i++){ 
     ballArray.push(this["ball" + i]); 
    } 
    trace(ballArray); 
} 

引用属性是不是一个真正的伟大实践中,虽然。如果可以动态创建球,那将是一个更好的实现。您可以在时间轴上创建一个球形MovieClip,然后在属性中选择“对于ActionScript导出”。然后,您可以使用此代码来实例化20米或更多的球:

//add 20 balls to stage 
var ballArray:Array = []; 
for(var i:int = 0; i < 20; i++){ 
    var ball:Ball = new Ball(); 
    addChild(ball); 
    ballArray.push(ball); 
} 
trace(ballArray); 
相关问题