在 Actionscript 3 中,如何通过循环语句创建影片剪辑?

In Actionscript 3, how do I create movieclips through a looping statement?

语句for以三元组作为参数

([=12=的初始值],停止循环的条件,i递增)

我想在每次循环时创建一个不同的影片剪辑。

所以,我尝试了:

for (i = 0; i < 9; i++){
    var Unit+i:MovieClip = new MovieClip()
}

但是,这会触发以下错误:

1086: Syntax error: expecting semicolon before plus"

那么正确的语法是什么?

基本上这就是你想要做的:

var arrMovieClips:Array = new Array(9);
for (var i:int = 0; i < arrMovieClips.length; i++)
{
    arrMovieClips[i] = new MovieClip();
}

这将创建一个包含九个元素的数组,因此您基本上有九个连续的变量:

arrMovieClips[0]
arrMovieClips[1]
arrMovieClips[2]
...
arrMovieClips[8]

然后它会通过并循环0、1、2等。当它到达arrMovieClips的长度时,即9,它就会停止。当它经过 0-8 时,它将创建一个新的 MovieClip 并将其存储在每个位置。

为了解决这个问题。您不能使用 var 关键字动态创建 var。所以这样做 var Unit+i 会给你一个语法错误。

您可以提前创建一个数组并将您的 object 放入其中(根据 @Panzercrisis 的 ,这是完全可以接受的)。

您可以通过其他方式做到这一点:

如果您当前的上下文是动态的(比如这是时间轴代码或动态 class 的一部分,例如 MovieClip),您可以这样做:

this["Unit"+i] = new MovieClip();

从编译时检查和代码维护的角度来看,我认为这有点草率,但对于快速时间线项目来说,这当然是可以接受的。

您也可以只将剪辑存储在显示列表以外的任何地方:

for(var i:int=0;i<9;i++){
    var mc:MovieClip = new MovieClip();
    //do whatever you need to do to the clip
    //like draw something for instance
    mc.graphics.beginFill(0xFF0000);
    mc.graphics.drawRect(0,0,100,100);

    addChild(mc); //add to the display list so you can see it
}

如果您永远不需要删除此剪辑,这种方式很棒。


或者,您可以将它们添加到容器显示 object

var clipContainer:Sprite = new Sprite(); //Sprite is the same as movie clip but without the timeline stuff
addChild(clipContainer);

for(var i:int=0;i<9;i++){
    var mc:MovieClip = new MovieClip();
    //do whatever you need to do to the clip
    //like draw something for instance
    mc.graphics.beginFill(0xFF0000);
    mc.graphics.drawRect(0,0,100,100);

    clipContainer.addChild(mc);
}

然后 clipContainer 将充当数组,您可以在其中访问它的所有内容 children。此外,moving/scalling 容器又会 move/scale 全部 children