开发者

Detecting when an object gets added to a movieclip

开发者 https://www.devze.com 2023-02-25 11:09 出处:网络
Alright, so I\'m trying to figure out 开发者_C百科when a child is added to a movieclip \"x\", and handling/detouring this operation from within this \"x\" movieclip.

Alright, so I'm trying to figure out 开发者_C百科when a child is added to a movieclip "x", and handling/detouring this operation from within this "x" movieclip.

I tried overriding addChild and addChildAt at with no prevail. The movieclips that are placed on the stage via flash still don't trigger addChild or addChildAt. However, tracing this.numChildren shows '2' correctly.

Any hints?


You can add an event listener for the "added" event for the x movie clip.

x.addEventListener(Event.ADDED, addHandler);

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

This link may explain it better: AS3.0 – Event.ADDED and Event.ADDED_TO_STAGE

The documentation is also a good resource: flash.events.Event


You can override the default methods of a movieclip by doing the following:

Create a class to extend a 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);                       
        }

    }

}

Then in Flash create a new movieclip, and make sure it is marked as Enable for ActionScript. The Class should be any name you want, but the base class needs to be SuperMovieClip (or the name you chose for your extended class) See image:

Detecting when an object gets added to a movieclip

Now when any stage clip is created of this base type (regardless if it's in the IDE or through code) it will be of type SuperMovieClip and anytime addChild is called it will override the original function.

For example, I placed an instance of this mc from library onto the stage at design time and compiled it using the following code on the timeline:

import flash.display.Sprite;

stage_mc.addChild(new Sprite());

And it output Hello, I am overriding add child

0

精彩评论

暂无评论...
验证码 换一张
取 消