检测对象何时添加到动画片段

时间:2011-04-12 08:25:16

标签: actionscript-3 events override addchild

好吧,所以我想弄清楚什么时候将一个孩子添加到一个动画片段“x”,并从这个“x”动画片段中处理/绕开这个动作。

我尝试重写addChild和addChildAt at at prevail。通过闪存放置在舞台上的动画片段仍然不会触发addChild或addChildAt。但是,跟踪this.numChildren会正确显示“2”。

任何提示?

2 个答案:

答案 0 :(得分:2)

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

x.addEventListener(Event.ADDED, addHandler);

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

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

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

答案 1 :(得分:1)

您可以通过执行以下操作来覆盖动画片段的默认方法:

创建一个扩展movieclip的类:

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中创建一个新的movieclip,并确保将其标记为Enable for ActionScript。类应该是您想要的任何名称,但基类必须是SuperMovieClip(或您为扩展类选择的名称)参见图像:

enter image description here

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

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

import flash.display.Sprite;

stage_mc.addChild(new Sprite());

输出Hello, I am overriding add child