By Joachim Schnier
Introduction
You often encounter that you load a movie into an empty movieclip and it does not work, because in nested movieclips objects on the main timeline are referred to with _root. In order to correct this you have to enter the correct path all the time. This pathcorrector component will do it for you. Test this in the following movie where you have three options: a movie loaded by loadMovieNum in level 1 and two movies one with and one without the pathcorrector loaded into an empty movieclip using movieHolder.loadMovie("myMovie.swf");. The uploaded movie contains another movie, movie2, which has a button to regulate one of the objects in movie1. Movie2 in all cases has a pathcorrector (exactly the same as movie1 has) and the name for the empty movieclip in movie1 to upload movie2 is also "movieHolder" as in the parent movie. So in summary you are dealing here with three movies.
Instructions to install: With the component the movie can be tested alone or loaded in the Parent movie. Place the component on the main stage and for movieclips with onClipEvent-Handlers on the movieclip timeline. Make sure that the empty movieclip name to load your movie in and in the component are identical. The default name is "movieHolder". Do not use _root for objects on the main timeline.
Download files.
|
The Code
We first create an empty movieclip and put the following code inside a keyframe:
checkPath.prototype= new MovieClip();
function checkPath(){
this.onEnterFrame=function(){
if(_root.movieHolder._url==undefined){
_parent._root = this._root;
}else{
_parent._root=_level0._root.movieHolder;
}
}
}
checkPath();
Object.registerClass ("checkPath", checkPath);
The code is very simple. We give this movieclip a new class function called checkPath. To make sure that the path is checked all the time we add an onEnterFrame function. Then we ask whether a path is defined, which has _root.movieHolder._url in it. If the movie is alone or a level1 movie, this path does not exist and then the parent root is its own root. Otherwise the parent root is different and starts with the level of the parent movie (0) over the empty movieclip (movieHolder), which is now the root for the child movie. And this is all what it is about.
Important: When you use the pathcorrector component, all objects directly on the stage should not have _root in front. It is not necessary in any case to do that. Unfortunately, there is a habbit to do it, which has been also enforced by Macromedia and is in my opinion not correct, because objects on the stage are automatically located at the root. If you do that when you use the component, the component won´t work. Test it out by yourself with one of the objects, which I made invisible. Now to complete the lesson have a look at the rest of the code in child movie 1 and 2.
Code Movie 1
stop();
//Dynamic Textfield text
if(_root.movieHolder._url==undefined){
textField.text="Status alone: this "+this;
}else{
textField.text="Status uploaded: this "+this;
}
//functions for buttons, the function for the oval button is a normal on(Release) function.
MovieClip.prototype.pressMe4 = function(){
this.onPress=function(){
_root.mc4._rotation+=10;
}
}
MovieClip.prototype.pressMe5 = function(){
this.onPress=function(){
_root.mc7._rotation+=10;
}
}
//execution of the functions
mc1.mc2.mc3.pressMe4();
mc1.mc3b.pressMe5();
mc3c.pressMe4();
mc6.mc7.pressMe5();
//notice here that mc5 and mc8 are not referenced with _root
mc5._visible=false;
//we give empty movieclip same name movieHolder as to load movie 1
mc8.movieHolder.loadMovie("movie2.swf");
Code Movie 2
Movie 2 has the function for a button with the name button_m2 and inside the function we refer to mc4 in movie 1 with _root. The rest is done by the pathcorrector, which is also present in this movie.
mo2.button_m2.onPress=function(){
_root.mc4._rotation+=30;
}
Conclusion
Please test the component in your movies. Give me feedback if it works and more important in which movies it does not work. Before you do that make sure you follow all the directions of this tutorial and name the empty movieclips correctly.
DISCLAIMER: The producer of the pathcorrector component, Joachim Schnier, shall not be held liable for any damage caused by the use of the component.
|