Clase Loaders - ActionScript 3 | Phoxer.com
Clase Loaders - ActionScript 3
22/11/2007

ActionScript 3 avanzo muchísimo a comparación de ActionScript 2, una de las cosas que se mejoró mucho es la carga de contenidos externos utilizando la ClaseLoader

Actualmente yo me programe una clase, llamada Loaders, que utiliza el Loader de Flash Player para facilitar el uso de esta misma y agregarle nuevas funcionalidades reutilizables

Asi se implementa:

import phoxer.Loaders;
 
var ld:Loaders= new Loaders();<br>
ld.backProgress=onProgress; 
ld.backComplete=onComplete;
ld.cancelar=true;
ld.useUnloadAndStop=true;
 
function onProgress(num:Number):void{
	//aqui se puede leer el progreso de la carga
}
function onComplete(ob:Object,ld:Loader):void{
	//aqui recivimos dos parametros
	//ob: el objeto que contiene el loader.
	//ld: el objeto loader.
}
 
//SWF File to load
ld.setLoad(this,"[FILE.SWF]");
 

Asi de fasil es el manejo de mi clase para cargar contenido externo, sirve tanto para swf, como para jpg,gif y png.


Tambien tiene otras funcionalidades como por ejemplo:

-ld.useUnloadAndStop: abilita el uso de UnloadAndStop
-ld.backProgress Usado para devolcer el progreso de la carga
-ld.backComplete debuelve dos parametros que se utilizan para saber cuando se termino la carga.
-ld.cancelar Abilita el unload() y el close() de la clase Loader.
-Metodos de errores.

My clase Loaders completa:

/**
LOADER by .:[PHOXER]:.
http://www.phoxer.com
v 4.4; 
*/
package phoxer{
	import flash.display.Loader;
	import flash.events.Event;
	import flash.events.IEventDispatcher;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;
	import flash.net.URLRequest;
	public class Loaders{
		private var clip:Object;
		private var loader:Loader;
		private var fileurl:URLRequest;
		private var isLoading:Boolean=false;
		public var backInit:Function=null;
		public var backProgress:Function=null;
		public var backComplete:Function=null;
		public var backError:Function=null;
		public var cancelar:Boolean=false;
		public var isVisible:Boolean=true;
		public var useUnloadAndStop:Boolean=false;
		public var useGarbageColector:Boolean=true;
		public function setLoad(cont:Object,url:String,nx:int=0,ny:int=0):void{
			clip=cont;
			//opts
			if(cancelar){
				if(isLoading){
					cancelLoad();
				}
			}
 
			loader = new Loader();
			fileurl = new URLRequest(url);
 
			loader.load(fileurl);
	        loader.x=nx;
			loader.y=ny;
			loader.visible=isVisible;
 
			configurarListeners(loader.contentLoaderInfo);
			clip.addChild(loader);
			isLoading=true;
		}
		public function cancelLoad():void {
			if (isLoading) {
				isLoading=false;
				loader.close();
				unload();
			}
		}
		public function removeLoader():void{
			if(loader!=null && !isLoading){
				unload();
			}
		}
 
		private function unload():void{
			if(useUnloadAndStop){
				try { 
	            	loader.unloadAndStop(useGarbageColector);
	         	} catch (e:Error) { 
	            	loader.unload(); 
	         	} 
  			}else{
  				loader.unload();
  			}
		}
 
		public function loading():Boolean{
			return isLoading;
		}
 
		private function configurarListeners(evnt:IEventDispatcher):void {
			if (backInit!=null) {
				evnt.addEventListener(Event.OPEN, onStart,false,0,true);
			}
			if (backProgress!=null) {
				evnt.addEventListener(ProgressEvent.PROGRESS, onProgress,false,0,true);
			}
			if(backComplete!=null){
				evnt.addEventListener(Event.COMPLETE, onComplete,false,0,true);
			}
			evnt.addEventListener(IOErrorEvent.IO_ERROR, onError,false,0,true);
		}
		private function onStart(e:Event):void {
				backInit();
		}
		private function onProgress(e:ProgressEvent):void {
			var total:Number = Math.round((e.bytesLoaded*100)/e.bytesTotal);
			backProgress(total);
		}
		private function onComplete(e:Event):void {
			isLoading=false;
			backComplete(loader.getChildAt(0),loader);
		}
		private function onError(e:Event):void {
			trace("LOADER ERROR: "+e)
			isLoading=false;
			if(backError!=null){
				backError();
			}
		}
	}
}