在AS 3.0中将字符串值转换为MovieClip

时间:2013-04-16 11:52:22

标签: actionscript-3

我正在尝试将字符串数组转换为舞台上已存在的MovieClip名称。

这就是我这样做的方式,但是鼻涕似乎有效。 我在舞台上有11个动画片段。它们的实例名称是“bmc1”,“bmc2”等等。 所有这些BMC影片剪辑都在名为“bars_mc”的剪辑中。所以这就是我现在正在编码的方式。

var myBtnArray = ['bmc1', 'bmc2', 'bmc3', 'bmc4', 'bmc5', 'bmc6', 'bmc7', 'bmc8', 'bmc9', 'bmc10', 'bmc11'];
for each (var btn in myBtnArray){
    bars_mc.MovieClip(getChildByName(btn)).gotoAndPlay('open');
}

这不起作用。 我试过了:

this[btn]

那也没有用。 这是在AS 3.0中编码的。

需要有人帮我找出将字符串转换为MOvieclips的正确方法。

帮助你。

2 个答案:

答案 0 :(得分:3)

我认为问题很可能是你在错误的地方添加了MovieClip强制转换,好像对象bars_mc上有一个属性MovieClip。

这个例子涉及一个额外的行,但应该更清楚一点:

var myBtnArray = ['bmc1', 'bmc2', 'bmc3', 'bmc4', 'bmc5', 'bmc6', 'bmc7', 'bmc8', 'bmc9', 'bmc10', 'bmc11'];
for each (var btn:String in myBtnArray) {
    var btnClip:MovieClip = bars_mc[btn] as MovieClip;
    btnClip.gotoAndPlay('open');
}

更接近原作的版本是:

var myBtnArray = ['bmc1', 'bmc2', 'bmc3', 'bmc4', 'bmc5', 'bmc6', 'bmc7', 'bmc8', 'bmc9', 'bmc10', 'bmc11'];
for each (var btn:String in myBtnArray) {
    MovieClip(bars_mc[btn]).gotoAndPlay('open');
}

答案 1 :(得分:0)

您应该将MovieClip存储在数组中,如下所示:

var myBtnArray = [bars_mc.bmc1, bars_mc.bmc2, bars_mc.bmc3, bars_mc.bmc4, bars_mc.bmc5, bars_mc.bmc6, bars_mc.bmc7, bars_mc.bmc8, bars_mc.bmc9, bars_mc.bmc10, bars_mc.bmc11];
for each (var btn in myBtnArray){
    btn.gotoAndPlay('open');
}

更好的是,如果你在该数组中的按钮是bars_mc的唯一子项,为什么不使用bars_mc的display lis而不是像这样的数组:

for (var index:int = 0;index < bars_mc.numChildren;index++)
{
   var btn:MovieClip = bars_mc.getChildAt(index) as MovieClip;
   btn.gotoAndPlay('open');
}

但是,如果您想要选择目前选择的路线,您可以这样做:

var myBtnArray = ['bmc1', 'bmc2', 'bmc3', 'bmc4', 'bmc5', 'bmc6', 'bmc7', 'bmc8', 'bmc9', 'bmc10', 'bmc11'];
for each (var btn:String in myBtnArray) {
    MovieClip(bars_mc[btn]).gotoAndPlay('open');
}