AS3中的动态变量MovieClip

时间:2011-04-24 08:47:14

标签: actionscript-3

您好我正在尝试这样做(在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);

3 个答案:

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