Multiple Preloader with x movies
Simply put all your movies to load and the corresponding
targets/levels in the array moviearray. Remember: If you
don't want the loaded clips to start immediatly after beeing
loaded, you have to place a stop action in the first frame
of the movie.
frame 1:
//provide a list with all your movies to load and the targets/levels to load into
moviearray = new Array("movie1.swf","target1","movie2.swf","level2","movie3.swf","_level99");
//set the index of the first movie to load
actMovieIdx = 0;
frame 2:
// get the next moviename and target/level
moviename = moviearray[actMovieIdx++];
movietarget = moviearray[actMovieIdx++];
// load the given movie
loadMovie(moviename, movietarget);
// remember the time where we started loading to calculate the bytes per second
starttime = getTimer();
frame 3:
//get the actual loaded bytes
actBytes = eval(movietarget).getBytesLoaded() || 0;
// get the total bytes to load
totBytes = eval(movietarget).getBytesTotal() || 100;
// calculate the percentage loaded
percent = Math.round(actBytes * 100 / totBytes);
// calculate bytes per second loaded
bps = Math.floor(actBytes * 1000 / (getTimer() - starttime));
frame 4:
if( totBytes - actBytes > 10){//more bytes available, keep on loading
gotoAndPlay(3);
} else if(actMovieIdx < moviearray.length){//if we got more movies to load
gotoAndPlay(2);
}
frame 5:
// ready, go - here starts your movie
- Tim Date: 03/07/2001
Very nice.
The bps is based on the bytes loaded over the time for one movie and is reset for each movie. As such we are calculating the cumulative bps for a movie.
We could have an extra variable to calculate the instant bps instead:
//Frame 2 - add as last line:
lastByteCount = 0;
//Frame 3 - change last line to:
bps = Math.floor((actBytes-lastByteCount) * 1000 / (getTimer() - starttime));
//and switch last 2 statements (to give more accurate estimation :) )
//Frame 4 - add as first two lines:
starttime = getTimer();
lastByteCount = eval(movietarget).getBytesLoaded() || 0;
I am not sure whether that is a good idea or not... Hmm, I think I\'m going to try all this out :) Thanks for the inspiration! That\'s great stuff.
Tim.
- MARIAM Date: 27/03/2002
the loading can be done but how does one start the next loaded movie from the first movie. the subsequent movies will have a stop command at the beginning, so how does one go beyond the first frame in the subsequent movies.
- Fox Date: 19/03/2003
I am running into the same problem as Mariam. I want the loaded movie to start playing, but:
myTarget.Play();
//myTraget is the placeholder blank MC
//the loaded external swf has a stop action in Frame 1
does not work.
So how do I address the loaded external swf?
- blah Date: 01/10/2003
Does this really work? It crashes Flash MX when I hit ctrl+enter.
- mu Date: 29/12/2003
This SO doesn't work!! - Do you have an online working version or FLA to prove me wrong? :o)
- Notice Date: 12/03/2004
This doesn't work.
- APS Date: 19/08/2004
I think the problem here is the declaration of actMovieIdx in frame 1 and the incrementing in frame 2. In Flash the first item in an array is numbered 0, not 1. In your code you set actMovieIdx to 0 then increment it to 1 and 2 in the 2nd frame. Therefore when you are calling:
moviename = moviearray[actMovieIdx++];
movietarget = moviearray[actMovieIdx++];
You are actually asking for:
moviename = moviearray[1] = "target1"
movietarget = moviearray[2] = "movie2.swf"
I think the simple fix is to set actMovieIdx = -1 in the first frame but I haven't tested yet . . .
- mw Date: 27/08/2004
Hmmm, when viewing the bandwidth profiler for this preload scheme, the playhead never moves beyond frame 3. Have others experienced this as well?
Add comment
Home