【问题标题】:Identify MovieClip in AS3 among DisplayObjectContainer在 DisplayObjectContainer 中识别 AS3 中的 MovieClip
【发布时间】:2010-12-11 11:39:05
【问题描述】:
在 ActionScript 3 中,如果我遍历影片剪辑的子级,它将返回一个 DisplayObjectContainer,它是一个 DisplayObject 列表。
但是,AS3 typeof 无法识别 MovieClip,因为 MovieClip 现在是一个对象,而不是数据类型。如何正确识别 MovieClip?
我在网上找到了3个解决方案:
解决方案1(我正在使用的解决方案):
首先将 MovieClip 名称设置为
具体名称,然后在迭代
处理,检查孩子的名字
使用 child.name.indexOf("specificName") > -1
解决方案 2:
使用 child.hasOwnProperty("numChildren") 来识别影片剪辑
解决方案 3:
使用 FlashDevelop 等第三方插件
哪种解决方案最好?还是有其他选择?
【问题讨论】:
标签:
flash
actionscript-3
movieclip
flashdevelop
displayobject
【解决方案1】:
它实际上在 AS3 中得到了很大的改进和简化。您可以简单地使用“is”运算符:
for(var i:int = 0; i < containerObj.numChildren; i++) {
if(containerObj.getChildAt(i) is MovieClip) {
// do something
}
}
Flash livedocs for this topic 有更多细节。
【解决方案2】:
按照 Richleland 的建议使用 is 关键字。
为吹毛求疵提前道歉,但我忍不住这么说:
-
getChildAt 返回 DisplayObject,而不是您在问题中建议的 DisplayObjectContainer。
-
numChildren 是 DisplayObjectContainer 类的属性,MovieClip 不是它的唯一派生类。 Loader、Stage 和 Sprite 扩展了 DisplayObjectContainer。 MovieClip 是 Sprite 的子类。因此,如果您想对孩子使用诸如gotoAndStop 之类的movieclip 特定操作,numChildren 技巧将失败。
- 比较名称的正确方法是
child.name == "specificName",除非您使用“specificName”作为所有作为影片剪辑的子项的前缀或后缀。