在 DisplayObjectContainer 中识别 AS3 中的 MovieClip
Posted
技术标签:
【中文标题】在 DisplayObjectContainer 中识别 AS3 中的 MovieClip【英文标题】:Identify MovieClip in AS3 among DisplayObjectContainer 【发布时间】: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 等第三方插件
哪种解决方案最好?还是有其他选择?
【问题讨论】:
【参考方案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”作为所有作为影片剪辑的子项的前缀或后缀。
【讨论】:
以上是关于在 DisplayObjectContainer 中识别 AS3 中的 MovieClip的主要内容,如果未能解决你的问题,请参考以下文章