2011-04-24 70 views
0

你好我试图做到这一点(在as2这个工作,但不是在as3)我看了谷歌3小时,但仍然没有找到一个解决方案(thans你的帮助):AS3动态变形动画片短片

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

这donsn't工作:

ArrayNamesOfMC.push(["mcImage"+i].name); 

回答

1

这应该做的伎俩:

var _movieClip:MovieClip = ("mcImage" + i) as MovieClip; 
ArrayNamesOfMC.push(_movieClip.name); 
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

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