在 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,而不是您在问题中建议的 DisplayObjectContainernumChildrenDisplayObjectContainer 类的属性,MovieClip 不是它的唯一派生类。 LoaderStageSprite 扩展了 DisplayObjectContainerMovieClipSprite 的子类。因此,如果您想对孩子使用诸如gotoAndStop 之类的movieclip 特定操作,numChildren 技巧将失败。 比较名称的正确方法是child.name == "specificName",除非您使用“specificName”作为所有作为影片剪辑的子项的前缀或后缀。

【讨论】:

以上是关于在 DisplayObjectContainer 中识别 AS3 中的 MovieClip的主要内容,如果未能解决你的问题,请参考以下文章

Egret 显示容器

Erget 显示对象

贪吃蛇-白鹭引擎

TypeScript -访问修饰符

动态获取位图数据

清除显示列表