我在舞台上有一堆影片剪辑,实例名称为ball1 - ball200。我希望我不必创建一个数组并手动将所有实例名称设置为数组
ballArray = [ball1, ball2,ball3, etc];
我试图让循环遍历并将每个实例名称添加到我的数组中,如下所示:
function createTheArray():void{
for(var i:int = 1; i < 20;i++){
ballArray.push(ball + i);
trace(newArray[i])
}
}
但我一直在找回未定义的数组索引。它还告诉我,我不知道“球”是什么。您将如何使用实例名称的一部分并将其与循环的索引值组合。那么第一次通过你将ball1作为数组的第一个索引值?
答案 0 :(得分:2)
将200个球拖到时间轴上并给它们实例名称听起来并不是很有趣!
最佳选择:
右键单击球对象并转到属性,单击&#34;导出动作脚本&#34;并给它一个独特的名称。 (对于这个例子,我们称之为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));
}
答案 1 :(得分:1)
您可以使用括号中的字符串来获取对象的属性。在您的情况下,您的对象称为此。所以你获得球的语法是this["ball"+index]
。
试试这个:
function createTheArray():void{
for(var i:int = 1; i < 20; i++){
ballArray.push(this["ball" + i]);
}
trace(ballArray);
}
按字符串引用属性并不是一个很好的做法。如果可以动态创建你的球,这将是一个更好的实现。您可以在时间轴上创建球MovieClip,然后在属性中选择Export For 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);