在DisplayObjectContainer中识别AS3中的MovieClip

时间:2009-10-30 02:23:12

标签: flash actionscript-3 movieclip flashdevelop displayobject

在ActionScript 3中,如果我遍历影片剪辑的子代,它将返回一个DisplayObjectContainer,它是一个DisplayObjects列表。

但是,AS3 typeof无法识别MovieClip,因为MovieClip现在是一个对象,而不是数据类型。如何正确识别MovieClip?

我在网上找到了3个解决方案:

解决方案1(我正在使用的解决方案):

  

首先将MovieClip名称设置为a   具体名称,然后在迭代中   过程中,检查孩子的名字   使用child.name.indexOf(“specificName”)> -1

解决方案2:

  

使用child.hasOwnProperty(“numChildren”)来识别MovieClip

解决方案3:

  

使用FlashDevelop等第三方插件

哪种解决方案最好?或者有其他选择吗?

2 个答案:

答案 0 :(得分:8)

在AS3中实际上有很多改进和简化。您只需使用“是”运算符:

for(var i:int = 0; i < containerObj.numChildren; i++) {
    if(containerObj.getChildAt(i) is MovieClip) {
        // do something
    }
}

Flash livedocs for this topic有更多细节。

答案 1 :(得分:1)

使用is关键字作为richleland建议。

提前道歉,但我无法抗拒说:

  • getChildAt返回DisplayObject,而不是DisplayObjectContainer,如问题所示。
  • numChildrenDisplayObjectContainer类的属性,MovieClip不是它的唯一派生类。 LoaderStageSprite延伸DisplayObjectContainerMovieClipSprite的子类。因此,如果您想对孩子使用像gotoAndStop这样的动画片段特定动作,numChildren技巧将会失败。
  • 比较名称的正确方法是child.name == "specificName",除非您使用“specificName”作为影片剪辑的所有子项的前缀或后缀。