您好我正在尝试这样做(在as2中这有效但不在as3中)我在google上看了3个小时,但仍然没有找到解决方案(可供您帮助):
import flash.display.MovieClip;
var mcContainer:MovieClip = new MovieClip();
var mcImage0:MovieClip = new MovieClip();
var mcImage1:MovieClip = new MovieClip();
var mcImage2:MovieClip = new MovieClip();
var mcImage3:MovieClip = new MovieClip();
mcImage0.name = "Boy";
mcImage1.name = "Girl";
mcImage2.name = "Woman";
mcImage3.name = "Man";
var ArrayNamesOfMC:Array = new Array();
var i:int = 4;
while(i--) {
ArrayNamesOfMC.push(["mcImage"+i].name);
}
这不起作用:
ArrayNamesOfMC.push(["mcImage"+i].name);
答案 0 :(得分:2)
这是您问题的简单答案:
var mcImage0:MovieClip = new MovieClip();
var mcImage1:MovieClip = new MovieClip();
var mcImage2:MovieClip = new MovieClip();
var mcImage3:MovieClip = new MovieClip();
mcImage0.name = "Boy";
mcImage1.name = "Girl";
mcImage2.name = "Woman";
mcImage3.name = "Man";
var ArrayNamesOfMC:Array = new Array();
var i:int = 3;
while (i >= 0)
{
ArrayNamesOfMC.push(MovieClip(this["mcImage" + i]).name);
i--;
}// end while
以下内容可能与您的情况无关,因为我不太确定您的申请的目的是什么,但这可能是一种更好的方法:
var sprites:Vector.<Sprite> = new Vector.<Sprite>();
var names:Vector.<String> = new <String>["Boy", "Girl", "Woman", "Man"];
for (var i:uint = 0; i < names.length; i++)
{
var sprite:Sprite = new Sprite();
sprite.name = names[i];
sprites.push(sprite);
}// end for
如果在您的情况下不适用,请忽略此。
答案 1 :(得分:1)
这应该可以解决问题:
var _movieClip:MovieClip = ("mcImage" + i) as MovieClip;
ArrayNamesOfMC.push(_movieClip.name);
答案 2 :(得分:1)
Taurayi的回答是一个我不了解的有趣技巧。
就个人而言,我建议重组你的代码,将所有的动画片段放在一个数组中,如下所示:
var mcImages:Array = new Array();
for (var i = 0; i < 4; i++) {
mcImages.push(new MovieClip);
}
mcImages[0].name = "Boy";
trace(mcImages[0].name);
顺便提一下,你的while循环构造不正确。您需要括号中的条件,然后在循环内执行减量。但是如果将所有的动画片段放在一个数组中,那么你可以使用这种更简单的方法来遍历所有这些:
for each (var mc in mcImages) {
trace(mc.name);
}