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

Reply via email to