在 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
语句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