2

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

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

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

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

首先将 MovieClip 名称设置为特定名称,然后在迭代过程中,使用 child.name.indexOf("specificName") > -1 检查孩子的名称

解决方案2:

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

解决方案3:

使用 FlashDevelop 等 3rd 方插件

哪种解决方案是最好的?还是有其他选择?

4

2 回答 2

9

它实际上在 AS3 中得到了很大的改进和简化。您可以简单地使用“is”运算符:

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

主题的 Flash livedocs有更多详细信息。

于 2009-10-30T02:52:49.397 回答
1

is按照 Richleland 的建议使用关键字。

提前为吹毛求疵道歉,但我忍不住这么说:

  • getChildAt返回DisplayObject,而不是DisplayObjectContainer您在问题中建议的那样。
  • numChildrenDisplayObjectContainer类的属性,并且MovieClip不是它的唯一派生类。Loader,StageSprite延伸DisplayObjectContainer. MovieClip是 的子类Sprite。因此,如果您想对gotoAndStop孩子使用特定的影片剪辑操作,那么 numChildren 技巧将失败。
  • 比较名称的正确方法是,child.name == "specificName"除非您使用“specificName”作为所有作为影片剪辑的子项的前缀或后缀。
于 2009-10-30T05:20:15.193 回答