I've written a simple class that loads multiple objects and triggers
a function when all have downloaded. If you needed to trigger
multiple sets of objects loading you could just create a new instance
of the class. You need the loadObj class also.
Hope this help
Ali
//
// LoadChecker
// this class is passed am array and calls a function when all of the
objects in the array are loaded
//
// Created by Alistair Colling on 2008-01-30.
//
// pass mcs to load and start loading
// FLA CODE
// import mc.LoadObj
//
// import mc.LoadChecker
// function completed(){ }
// function percentLoad(pc:Number){};
// this.createEmptyMovieClip("loader", 1);
// var ob1:LoadObj = new LoadObj("Content/roseAnim.swf", loader);
// var load_ar:Array = [ob1]
// var myLoader:LoadChecker = new LoadChecker(load_ar, completed,
percentLoad);
//
//
//
import mc.*;
import mx.utils.Delegate;
//
class mc.LoadChecker {
private var allLoadedFn:Function;
private var progFn:Function;
public var itemsToLoad_ar:Array;
private var itemsLoaded:Array;
//total Bytes to load of all objects passed
private var totalBytes:Number;
private var totalLoaded:Number;
public function LoadChecker(a:Array, f:Function, pF:Function) {
trace("loadchecker! created:"+a.toString());
totalBytes = 0;
totalLoaded = 0;
allLoadedFn = f;
progFn = pF;
itemsLoaded = new Array();
itemsToLoad_ar = a;
for (var i = 0; i<itemsToLoad_ar.length; i++) {
var arRef:Number = i;
var tempLoad:LoadObj = itemsToLoad_ar[arRef];
//array contains custom objects taht contain url and
mc vars
myLoader(tempLoad.targURL,tempLoad.targMC);
}
}
private function myLoader(str:String, mc:MovieClip) {
// trace("MY LOADER loading file:"+str+" mc:"+mc);
var loadListener = new Object();
loadListener.onLoadInit = Delegate.create(this, mcLoaded);
loadListener.onLoadProgress = Delegate.create(this,
loadProgress);
var mcLoader = new MovieClipLoader();
mcLoader.addListener(loadListener);
//create holder inside of movie clip--remove this when finished
lenor!!
//var holder:MovieClip = mc.createEmptyMovieClip("holder",
mc.getNextHighestDepth());
mcLoader.loadClip(str, mc);
}
//returns pos of mc in array
private function mcInAr(mc:MovieClip, ar:Array):Number{
var retNum:Number = undefined;
for (var i=0; i<ar.length; i++){
//trace("--CHECKING MC:"+mc+" arrray
MC:"+ar[i].targMC);
if (mc == ar[i].targMC){
retNum = i;
}
}
return retNum;
}
private function loadProgress(target:MovieClip, bytesLoaded:Number,
bytesTotal:Number):Void {
var posInAr:Number = mcInAr(target, itemsToLoad_ar);
//add totalBytes up when first progress comes thru for each
object
//trace("load progress mc"+target+" total bytes:"+bytesTotal+" so
far"+bytesLoaded);
if (itemsToLoad_ar[posInAr].totalBytes==undefined){
itemsToLoad_ar[posInAr].totalBytes = bytesTotal;
totalBytes += bytesTotal;
// trace("> > > > TOTAL BYTES UPDATED TO:"+totalBytes);
}
itemsToLoad_ar[posInAr].bytesLoaded = bytesLoaded;
///update total bytes loaded-- could think of a better way to code
this so it doesnt reset to 0
totalLoaded = 0;
for ( var i=0; i<itemsToLoad_ar.length; i++ ) {
totalLoaded+= itemsToLoad_ar[i].bytesLoaded;
};
// trace("> > > > total bytes loaded now:"+totalLoaded);
calcPercent()
//calculate total % bytes loaded
}
//triggers function that shows total percentage loaded-- could be
extended to return an array of values to show individual fiels
loading status
private function calcPercent() {
var pcLoaded:Number = Math.round((totalLoaded/totalBytes)*100);
// trace("--- Total PERCENT NOW LOADED:"+pcLoaded);
progFn(pcLoaded);
}
private function mcLoaded(mcl:MovieClip) {
itemsLoaded.push(mcl);
// trace("itemsLoaded:"+itemsLoaded.length+"
tload:"+itemsToLoad_ar.length);
if(itemsLoaded.length==itemsToLoad_ar.length){
allLoadedFn.apply(null);
}
}
}
//////
//
// LoadObj
//used by the LoadChewcker class for loading mutliple objects, this
obj is held i an array
//
// Created by Alistair Colling on 2008-01-30.
//
class mc.LoadObj {
public var targURL:String;
public var targMC:MovieClip;
public var bytesLoaded:Number = 0;
//url of object to load into mc.
function LoadObj(s:String, m:MovieClip){
targURL = s;
targMC = m;
}
}
On 12 Feb 2008, at 18:18, Marcelo Wolfgang wrote:
Hi all,
I'm using the movieClipLoader class to load 6 different images
'simultaneous' but since it's the same object that got called every
time the .onLoadInit on happens for the last call, does anyone has a
clue how I can make this:
function displayThumbs() {
for (i = 0; i < modelsArray.length; i++) {
var path:String =
"http://www.bottero.net/2008/images/modelos/s/ref"
+ modelsArray[i] + "s.png";
loadImage(path,thumb_mc);
}
}
function loadImage(imagePath, targetMc) {
var container_mc:MovieClip = targetMc.img_mc;
var loading_mc:MovieClip = targetMc.loading_mc;
mclListener.onLoadInit = function() {
main.hideMc(loading_mc);
};
img_mcl.addListener(mclListener);
img_mcl.loadClip(imagePath,container_mc);
}
var mclListener:Object = new Object();
var img_mcl:MovieClipLoader = new MovieClipLoader();
work for multiple loadings at the same time ?
TIA
Marcelo Wolfgang
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders