在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等第三方插件
哪种解决方案最好?或者有其他选择吗?
答案 0 :(得分:8)
在AS3中实际上有很多改进和简化。您只需使用“是”运算符:
for(var i:int = 0; i < containerObj.numChildren; i++) {
if(containerObj.getChildAt(i) is MovieClip) {
// do something
}
}
答案 1 :(得分:1)
使用is
关键字作为richleland建议。
提前道歉,但我无法抗拒说:
getChildAt
返回DisplayObject
,而不是DisplayObjectContainer
,如问题所示。numChildren
是DisplayObjectContainer
类的属性,MovieClip
不是它的唯一派生类。 Loader
,Stage
和Sprite
延伸DisplayObjectContainer
。 MovieClip
是Sprite
的子类。因此,如果您想对孩子使用像gotoAndStop
这样的动画片段特定动作,numChildren技巧将会失败。child.name == "specificName"
,除非您使用“specificName”作为影片剪辑的所有子项的前缀或后缀。