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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-09
        • 1970-01-01
        • 2015-11-07
        • 2017-03-17
        • 1970-01-01
        • 1970-01-01
        • 2012-02-23
        • 2011-03-12
        相关资源
        最近更新 更多