1

好的,所以我试图弄清楚何时将孩子添加到影片剪辑“x”中,并在此“x”影片剪辑中处理/绕行此操作。

我尝试覆盖 addChild 和 addChildAt 没有占上风。通过 flash 放置在舞台上的影片剪辑仍然不会触发 addChild 或 addChildAt。但是,跟踪this.numChildren正确显示“2”。

有什么提示吗?

4

2 回答 2

2

您可以为 x 影片剪辑的“已添加”事件添加事件侦听器。

x.addEventListener(Event.ADDED, addHandler);

function addHandler(e:Event){
 // your code here
}

此链接可能会更好地解释它: AS3.0 – Event.ADDED 和 Event.ADDED_TO_STAGE

该文档也是一个很好的资源: flash.events.Event

于 2011-04-12T08:41:36.447 回答
1

您可以通过执行以下操作来覆盖影片剪辑的默认方法:

创建一个类来扩展影片剪辑:

package  {
    import flash.display.*;

    public class SuperMovieClip extends MovieClip {

        public function SuperMovieClip() {
            // constructor code
            super();
        }

        override public function addChild(child:DisplayObject):DisplayObject {
            trace("Hello, I am overriding add child");
                    // still perform the default behavior but you can do what ever you want. 
            return super.addChild(child);                       
        }

    }

}

然后在 Flash 中创建一个新的影片剪辑,并确保将其标记为 Enable for ActionScript。类应该是您想要的任何名称,但基类需要是 SuperMovieClip(或您为扩展类选择的名称)参见图片:

在此处输入图像描述

现在,当任何舞台剪辑创建此基本类型时(无论它是在 IDE 中还是通过代码),它将是 SuperMovieClip 类型,并且无论何时调用 addChild,它都会覆盖原始函数。

例如,我在设计时将这个 mc 的实例从库中放置到舞台上,并在时间轴上使用以下代码对其进行编译:

import flash.display.Sprite;

stage_mc.addChild(new Sprite());

它输出Hello, I am overriding add child

于 2011-04-12T08:42:23.187 回答