使用for循环将movieClip的实例名称推送到数组中

时间:2014-10-31 18:39:59

标签: arrays actionscript-3 flash for-loop

我在舞台上有一堆影片剪辑,实例名称为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作为数组的第一个索引值?

2 个答案:

答案 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);