在ActionScript3中泛化实例名称

时间:2012-09-13 13:00:49

标签: actionscript-3 actionscript movieclip

想象一下有一种情况:我有100个带有实例名称的动画片段:MC1a,MC2a,MC3a .. MC100a 我希望所有这些都是隐形的,除了:

MC1a.visible = false; ... MC100a.visible = false;

因为这样代码变得非常沉重,我认为这不是正确的方法。所以我在想是否有任何可能的方式成为这样的东西:

MC*a.visible = false;

所有在乞讨和'a'中包含'MC'的动画片段和结尾消失了吗?也许有阵列的东西?

3 个答案:

答案 0 :(得分:3)

如果所有这些动画片段的父级都被称为容器,则可以执行以下操作:

container["MC"+i+"a"].visible=false

这是由于ActionScript的脚本性质。

对于您的特定情况,您可以

for(i=0;i<100;i++){
    container["MC"+i+"a"].visible=false;
}

如果你没有0到100之间的所有数字,你可以这样做:

for each(MovieClip mc in container){
    name=mc.name;
    if(name.substring(0,2)=="MC" && name.substring(-1)=="a"){
        mc.visible=false;
    }
}

(这是未经测试的伪代码)

答案 1 :(得分:0)

有几种方法可以实现这一目标。首先 - 制作一个Sprite容器,它将是它们的共同父级,然后改变它的可见性。这不是一种灵活的方式,例如,如果您的影片剪辑位于舞台的两个不同区域,并且需要以某种方式进行交互,则可能无法将它们全部放在显示列表中的单个父级下。第二种方法是在实例化时从这100个影片剪辑中创建一个数组(当然,如果可能的话),然后遍历数组并在循环中分配它们的可见性。

基本上,如果您有一些应该构成结构的对象,请考虑先以某种方式链接它们,然后一起改变它们的可见性或其他参数。如果您需要一次性移动它们或隐藏,容器方法会更好。如果你需要它们来执行类似但不完全相同的动作(比如你有怪物作为电影剪辑,你需要它们一起移动,但每个都有自己的方向和速度),你应该有一个数组。

要考虑的另一件事是,如果有一个名为“MCbig_a”的影片剪辑,即符合您的条件,但不完全属于您希望隐藏的MC组,您将拥有采取预防措施。

答案 2 :(得分:0)

假设al children被添加到名为myContainer的同一容器中

var container:MovieClip = myContainer;
var i:uint = container.numChildren;
while (i--)
{
    var child:* = container.getChildAt(i);
    child.visible = false;
}