Comunidad de diseño web y desarrollo en internet online

Eventos del objeto Loader

Citar            
MensajeEscrito el 04 Mar 2009 12:46 pm
Buenas de nuevo,

como siempre que tengo un rato, estoy intentando aprender AS3 haciendo proyectillos. En este caso, quiero crear un boton dinamicamente, y he visto muchos ejemplos en internet, no parece ser dificil. La cuestión es que no consigo que los eventos Event.COMPLETE y ProgressEvent.PROGRESS disparen sendas funciones.

Mi código es el siguiente (solo es la función implicada, si fuera necesario pegar todo el código de la clase decídmelo):

Código :

private function createButton():void {
         var myButton:Sprite = new Sprite(); 
         this.addChild(myButton);
         myButton.x = 20;
         myButton.y = 40;
         
         var loader:Loader = new Loader();
         loader.load(new URLRequest("icons/inactive/fullscreen.png"));
         loader.addEventListener(Event.COMPLETE, onLoadComplete);
         loader.addEventListener(ProgressEvent.PROGRESS, onLoadButtonImageProgress);

         function onLoadComplete(event:Event):void {
            addChild(loader);
            trace("adios");
         }
         
         function onLoadButtonImageProgress(pe:ProgressEvent):void {
            var percentLoaded:Number = int(pe.bytesLoaded / pe.bytesTotal) * 100;
            trace(percentLoaded + "%");
         }
         
      }


Notas:
- la ruta de la imagen es correcta, de hecho si hago "addChild(loader)" fuera de las funciones disparadas por los eventos, la muestra correctamente.
- aunque la imagen que cargo es local y pequeña, he probado con imagenes grandes remotas, por si "cargara tan rapido que no disparara el evento onProgress". Por probar cosas, vamos.

Gracias por vuestra atención y un saludo.

Por akhasis

75 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Mar 2009 01:22 pm
Deberías definir las funciones onLoadComplete y onLoadButton FUERA de la función createButton (no estoy demasiado seguro de que se puedan definir DENTRO de una función)
Por otra parte supongo que lo que quieres hacer cuando creas el botón es añadirle un Event.MOUSE_DOWN que cargue la imagen que sea, cos que no estás haciendo

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Mar 2009 03:23 pm
Gracias Eliseo2, pero haciendo los cambios que me has dicho no funcionan.

Pego a continuación el código completo de la clase, por si pudiera servir:

Código :

package 
{
   import flash.display.*;
   import flash.events.*;
   import flash.net.*;
   
   /**
    * ...
    * @author ...
    */
   public class buttonCreator extends Sprite 
   {
      private var loader:Loader;
      
      public function buttonCreator():void 
      {
         var myButton:Sprite = new Sprite(); 
         addChild(myButton);
         myButton.x = 20;
         myButton.y = 40;
         
         var loader:Loader = new Loader();
         loader.addEventListener(Event.COMPLETE, onLoadComplete);
         loader.addEventListener(Event.INIT, onLoadInit);
         loader.addEventListener(ProgressEvent.PROGRESS, onLoadButtonImageProgress);
         loader.addEventListener(IOErrorEvent.IO_ERROR, loaderOnError, false, 0, true); 
         loader.load(new URLRequest("icons/inactive/fullscreen.png"));
         
         myButton.addChild(loader);
 
      }
      
      private function onLoadComplete(event:Event):void {
         trace("adios");
      }
         
      private function onLoadButtonImageProgress(pe:ProgressEvent):void {
         var percentLoaded:Number = int(pe.bytesLoaded / pe.bytesTotal) * 100;
         trace(percentLoaded + "%");
      }
      
      private function loaderOnError(ie:IOErrorEvent):void {
         trace("error");
      }
      
      private function onLoadInit(event:Event):void {
         trace("init");
      }
      
   }
   
}


Estoy bastante desconcertado con este tema, ya que no veo diferencia con los ejemplos que veo hechos en internet.

Por otro lado, todavia no le he añadido "comportamientos" al botón, lo que estoy haciendo ahora mismo es sólo ponerle una imagen de fondo (lo que sería el "aspecto" del botón).

Gracias de nuevo por vuestra atención

Por akhasis

75 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Mar 2009 03:55 pm
Ok, lo he resuelto al final, era una tonteria. Es lo que tiene tocar AS3 sólo de higos a brevas.

El problema era la asignación del evento, en vez de

Código :

loader.addEventListener(Event.COMPLETE, onLoadComplete);

debería ser

Código :

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);


Gracias de nuevo por vuestra atención.

Por akhasis

75 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.