Skip to Content »

Precarga multiple en AS3

  • 02/06/2008
  • 11:49 pm
  • unijimpe

BulkLoader es una clase escrita en AS3 que te permitirá cargar y manejar múltiples archivos de manera sencilla. Esta clase te permitirá cargar múltiples archivos de diferente tipo en una interface unificada, accediendo a los eventos de carga en la misma instancia.

Utilizando BulkLoader
Lo primero es descargar la ultima versión de BulkLoader, extraen los archivos y en la carpeta src se encuentran las clases necesarias para el uso de esta librería.

Lo primero es importar las clases BulkLoader y BulkProgressEvent y posteriormente creamos una instancia de la clase BulkLoader, al cual le asignamos un nombre, en este caso mainLoader:

  1. import br.com.stimuli.loading.BulkLoader;
  2. import br.com.stimuli.loading.BulkProgressEvent;
  3.  
  4. var loader:BulkLoader = new BulkLoader("mainLoader");

A continuación agregamos los items o elementos que deseamos cargar, pueden ser archivos jpg, gif, png, xml, mp3, flv, etc. Para ello utilizamos el método add donde asignamos la ruta a cargar y un nombre de id para recuperar los datos cargados posteriormente.

  1. loader.add("background.jpg", {id: "bg"});
  2. loader.add("menu.xml", {id:"menu"});
  3. loader.add("sound.mp3", {id: "sound"});

El siguiente paso es agregar los detectores de eventos o listeners (COMPLETE, PROGRESS, ERROR) con los cuales podemos detectar el progreso de la carga y el termino de la misma.

  1. // para la carga de todos los archivos
  2. loader.addEventListener(BulkLoader.COMPLETE, onLoaded);
  3. loader.addEventListener(BulkLoader.PROGRESS, onProgress);
  4. loader.addEventListener(BulkLoader.ERROR, onError);
  5. // para la carga de uno de los elementos
  6. loader.get("bg").addEventListener(Event.COMPLETE,onBgLoaded);
  7. loader.get("bg").addEventListener(Event.PROGRESS,onBgProgress);
  8. loader.get("bg").addEventListener(Event.ERROR,onBgError);

Luego iniciamos la carga utilizando el método start.

  1. loader.start();

Finalmente implementamos las funciones asociadas a los detectores de eventos y obtenemos los archivos cargados, para ello podemos utilizar getBitmap, getSound, getXML, getText, getNetStream, getSound, getMovieClip de acuerdo al archivo que estemos cargando.

  1. function onLoaded(evt:Event) {
  2.    // extraemos la imagen
  3.    var mcBg:Bitmap = loader.getBitmap("bg");
  4.    addChild(mcBg);
  5.    // extraemos el sonido
  6.    var sonido:Sound = loader.getSound("sound");
  7.    sonido.play();
  8.    // extraemos el XML
  9.    var xmlMenu:XML = loader.getXML("menu");
  10.    trace(xmlMenu);
  11. }

Luego uniendo todos los elementos, obtenemos nuestro precargador de múltiples archivos.

  1. import br.com.stimuli.loading.BulkLoader;
  2. import br.com.stimuli.loading.BulkProgressEvent;
  3.  
  4. var loader:BulkLoader = new BulkLoader("mainLoader");
  5. loader.add("background.jpg", {id: "bg"});
  6. loader.add("menu.xml", {id:"menu"});
  7. loader.add("sound.mp3", {id: "sound"});
  8.  
  9. loader.addEventListener(BulkLoader.COMPLETE, onLoaded);
  10. loader.addEventListener(BulkLoader.PROGRESS, onProgress);
  11.  
  12. function onLoaded(evt:Event) {
  13.    // extraemos la imagen
  14.    var mcBg:Bitmap = loader.getBitmap("bg");
  15.    addChild(mcBg);
  16.    // extraemos el sonido
  17.    var sonido:Sound = loader.getSound("sound");
  18.    sonido.play();
  19.    // extraemos el XML
  20.    var xmlMenu:XML = loader.getXML("menu");
  21.    trace(xmlMenu);
  22. }
  23. public function onAllItemsProgress(evt:BulkProgressEvent) {
  24.    trace(evt.bytesLoaded + " - " + evt.bytesTotal);
  25. }

Como pueden ver es muy sencillo el uso de esta clase y puede facilitar y ahorrar tiempo en la implementación de sitios con acceso a múltiples tipo de datos.

Posts Relacionados

Precargar archivos en AS3

  • 27/05/2008
  • 12:19 am
  • unijimpe

ActionScript 3 trae nuevos métodos, propiedades y eventos para implementar nuestras aplicaciones, en esta ocasión crearemos un precargador de archivos en AS3, para ello ahora estan disponibles nuevas clases: URLRequest y Loader.

Cargando Flash

La clase URLRequest nos permitirá asignar el archivo que deseamos cargar y la clase Loader nos permitirá hacer el seguimiento en el proceso de la carga.

  1. var mcRequ:URLRequest = new URLRequest("image.jpg");
  2. var mcLoad:Loader = new Loader();

Luego de ello iniciamos la carga del archivo utilizando el método load de la clase Loader.

  1. mcLoad.load(mcRequ);

Luego el siguiente paso es agregar los detectores de eventos, en esta caso detectaremos el inicio de la carga, el progreso de la carga y el fin de la carga.

  1. mcLoad.contentLoaderInfo.addEventListener(Event.OPEN, onOpen);
  2. mcLoad.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
  3. mcLoad.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);

Nótese que hemos agregado las funciones onOpen, onProgress y onComplete que se ejecutarán al inicio, progreso y fin de la carga. Entonces lo que hace falta es implementar estas funciones.

  1. function onOpen(event:Event):void {
  2.     txtload.text = "CARGANDO 0%";
  3. }
  4. function onProgress(event:ProgressEvent):void {
  5.     var bLoad = event.bytesLoaded;
  6.     var bTot = event.bytesTotal;
  7.     txtload.text = "CARGANDO "+Math.round(100*bLoad/bTot)+"%";
  8. }
  9. function onComplete(event:Event):void {
  10.     txtload.text = "";
  11.     mcclip.addChild(mcLoad);
  12.     mcclip.width = 400;
  13.     mcclip.height = 134;
  14. }

En este paso hay que notar como se obtienes los valores de los bytes cargados (bytesLoaded) y los bytes totales (bytesTotal) para hacer el calculo del porcentaje de carga. Además de ello txtload es un campo de texto y mcclip un MovieClip que están en el Stage en donde se cargará la imagen. Finalmente una vez cargado la imagen la agregamos al MovieClip mcclip y luego lo escalamos para que encaje en nuestra película.

Uniendo todos los elementos, tenemos nuestro precargador de archivos en ActionScript 3, el cual fácilmente se puede convertir en una clase para poder utilizarla para precargar cualquier archivo.

  1. var mcRequ:URLRequest = new URLRequest("image.jpg");
  2. var mcLoad:Loader = new Loader();
  3.  
  4. mcLoad.load(mcRequ);
  5. mcLoad.contentLoaderInfo.addEventListener(Event.OPEN, onOpen);
  6. mcLoad.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
  7. mcLoad.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
  8. function onOpen(event:Event):void {
  9.     txtload.text = "CARGANDO 0%";
  10. }
  11. function onProgress(event:ProgressEvent):void {
  12.     var bLoad = event.bytesLoaded;
  13.     var bTot = event.bytesTotal;
  14.     txtload.text = "CARGANDO "+Math.round(100*bLoad/bTot)+"%";
  15. }
  16. function onComplete(event:Event):void {
  17.     txtload.text = "";
  18.     mcclip.addChild(mcLoad);
  19.     mcclip.width = 400;
  20.     mcclip.height = 134;
  21. }

Como pueden ver, no es muy complicado solo hay que entender la logica de funcionamiento de AS3 y el correcto uso de los detectores de eventos. Para finalizar les dejo los archivos fuentes para que puedan descargar y hacer sus pruebas.

Posts Relacionados

Como utilizar Flashvars

  • 27/04/2008
  • 7:23 pm
  • unijimpe

Flashvars es un propiedad de Flash Player que ofrece un método eficaz para enviar variables desde HTML al archivos SWF, esta función fue implementada a partir de Flash Player 6, en esta ocasión veremos como utilizarla en AS2 o AS3.

Pasando variables FlashVars
Si estas usando el método tradicional de insertar SWFs, pueden asignarlos en un parámetro adicional al cual deben llamar flashvars y cuyo valor debe contener todas las variables a pasar codificadas en url.

  1. <object width="200" height="100">
  2.    <param name="movie" value="movie.swf" />
  3.    <param name="FlashVars" value="var1=valor1&var2=valor2" />
  4.    <embed src="miSwf.swf" width="100" height="100
  5.     FlashVars="var1=valor1&var2=valor2"/>
  6. </object>

Si estas utilizando SWFObject, puedes pasar las variables separadas utilizando el método addVariable, entonces el ejemplo anterior se vería de la siguiente forma:

  1. <script type="text/javascript">
  2. var so = new SWFObject("movie.swf", "my", "200", "100", "8", "");
  3. so.addVariable("var1", "valor1");
  4. so.addVariable("var2", "valor2");
  5. so.write("divmovie");
  6. </script>

Accediendo a FlashVars desde AS2
Cuando uno utiliza Flashvars, estas pasan a ser variables del _root de nuestra película principal. Luego podemos acceder de manera sencilla a estas variables anteponiendo la palabra _root.

  1. trace(_root.var1); // imprime "valor1"
  2. trace(_root.var2); // imprime "valor2"

Accediendo a FlashVars desde AS3
En AS3 las variables externas están contenidas en la propiedad LoaderInfo, entonces lo primero es tomar esta propiedad de la cual extraemos las variables contenidas en el método parameters.

  1. var param:Object = LoaderInfo(this.root.loaderInfo).parameters;
  2. trace(param["var1"]); // imprime "valor1"
  3. trace(param["var2"]); // imprime "valor2"

Como pueden observar es sencillo de acceder a estas variables, esto es muy practico cuando deseamos comunicar datos entre HTML y Flash.

Posts Relacionados