Per gestire i caricamenti multipli in maniera più semplice ho scritto una classe che usa MovieClipLoader per caricare e che gestisce, oltre agli eventi già presenti, un altro evento che viene avviato nel momento in cui tutte le immagini sono state caricate, l'evento onMultipleLoadComplete, inoltre possiede delle proprietà da utilizzare durante il caricamento per gestire in maniera più semplice il tutto. Il metodo addLoader aggiunge un caricamento ad un movieclip, mentre con il metodo forEachProperty puoi assegnare il valore di una proprietà ad ogni movieclip registrato per la classe.
Codice PHP:
class LoaderManager {
private static var _loaders:Array;
private static var _instance:LoaderManager;
private static var _allowInstantiation:Boolean;
private static var _mcloader:Object;
private static var _init:Boolean;
private static var _counter:Number;
public var onLoadStart:Function;
public var onLoadProgress:Function;
public var onLoadComplete:Function;
public var onLoadInit:Function;
public var onLoadError:Function;
public var onMultipleLoadComplete:Function;
function LoaderManager () {
if (!_allowInstantiation) {
throw (new Error("Error: Instantiation failed: Use LoaderManager.getInstance() instead of new."));
}
}
public static function getInstance ():LoaderManager {
if (_instance == null) {
_allowInstantiation = true;
_instance = new LoaderManager();
_allowInstantiation = false;
}
return _instance;
}
public static function addLoader (target:MovieClip, str_url:String) {
if (_loaders == null) _loaders = [];
if (_counter == null) _counter = 0;
if (_mcloader == null) {
_mcloader = new MovieClipLoader();
_mcloader.onLoadStart = _instance.onLoadStart;
_mcloader.onLoadProgress = _instance.onLoadProgress;
_mcloader.onLoadComplete = _instance.onLoadComplete;
_mcloader.onLoadError = _instance.onLoadError;
_mcloader.onLoadInit = function (target) {
LoaderManager._instance.onLoadInit(target);
LoaderManager._counter++;
if (LoaderManager._counter == _loaders.length) {
LoaderManager._instance.onMultipleLoadComplete();
}
}
}
_mcloader.loadClip(str_url, target);
_loaders.push(target);
}
public static function forEachProperty (str_property:String, value:Object) {
for (var j:Number=0; j<_loaders.length; j++) {
_loaders[j][str_property] = value;
}
}
public static function get loaders ():Array {
return _loaders;
}
public static function get bytesLoaded ():Number {
var car = 0;
for (var j:Number=0; j<_loaders.length; j++) {
car += _loaders[j].getBytesLoaded();
}
return car;
}
public static function get bytesTotal ():Number {
var tot = 0;
for (var j:Number=0; j<_loaders.length; j++) {
tot += _loaders[j].getBytesTotal();
}
return tot;
}
}
Si usa in questo modo:
Codice PHP:
var l:LoaderManager = LoaderManager.getInstance();
l.onLoadStart = function (t) {
trace ("Load Started for "+t);
}
l.onLoadProgress = function (t, bl, bt) {
var car = LoaderManager.bytesLoaded;
var tot = LoaderManager.bytesTotal;
var prc = Math.floor((car/tot)*100);
trace(prc+"% : "+car+" di "+tot);
}
l.onLoadComplete = function (t) {
trace ("Load Completed for "+t);
}
l.onLoadInit = function (t) {
trace ("MovieClip initialization for "+t);
}
l.onMultipleLoadComplete = function () {
for (var i=0; i<LoaderManager.loaders.length; i++) {
LoaderManager.loaders[i]._x = i*200;
}
}
LoaderManager.addLoader(mc1, "img1.jpg");
LoaderManager.addLoader(mc2, "img2.jpg");
LoaderManager.addLoader(mc3, "img3.jpg");