1
votes

Alright, so I'm trying to figure out 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?

2

2 Answers

2
votes

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

1
votes

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:

enter image description here

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