In Flash 9 when you create MovieClip instance on the screen and give it an instance name, you are doing two things:
- You're assigning the name property of the MovieClip instance to be the string equivalent to the instance name provided
- You're creating a variable in the current timeline with the name of the instance name that references that MovieClip instance
Flash does this behind the scenes when you publish your SWF to help you manage your movie clips on the screen. It's important to note that this behavīor (specifically #2) is not seen with Actionscrīpt. For Example:
Actionscrīpt Code:
// my_mc is the instance name of a movie clip
// created on this timeline
trace(my_mc); // [object MovieClip]
trace(my_mc.name); // my_mc
// create a new movie clip via AS
// add it to my_mc
var another_mc:MovieClip = new MovieClip();
another_mc.name = "child_mc";
my_mc.addChild(another_mc);
// instance name not available in parent timeline
trace(another_mc); // [object MovieClip]
trace(my_mc.child_mc); // undefined
trace(my_mc.another_mc); // undefined
You can see that neither the instance name (
name property) nor the variable to which the new MovieClip created with Actionscrīpt was assigned is referencable through the movie clip in which it was added (my_mc). This is because another_mc was created and added to the timeline dynamically. Flash will only save instance names as variables for movie clips created on the timeline in Flash.
If you want to use an instance name to get a MovieClip (or any DisplayObject) instance from the timeline in which it exists, you can use getChildByName();
Actionscrīpt Code:
trace(my_mc.getChildByName("child_mc")); // [object MovieClip]);
This will work for all movie clips despite where or how they were located as long as they are within the timeline/movie clip from which getChildByName was used.