Comunidad de diseño web y desarrollo en internet online

Identificando los eventos al cargar runtime

Citar            
MensajeEscrito el 02 Sep 2008 11:39 am
Estoy cargando 3 imágenes en runtime de la siguiente forma


Código ActionScript :

var aDirecciones:Array = [ "jpg/auto1.jpg", "jpg/auto2.jpg", "jpg/auto3.jpg" ]
var aCargadores:Array = new Array();
var aContainers:Array = new Array();
var iniY:Number = 80;
var step:Number = 120;

for ( var i:int = 0; i<aDirecciones.length; i++ )
{
   aCargadores[i] = new Loader();
   aContainers[i] = new Sprite();
   aContainers[i].x = 50;
   if ( i == 0 )
   {
      aContainers[i].y = iniY;
   }
   else
   {
      aContainers[i].y = aContainers[i-1].y + step;
   }
   this.addChild( aContainers[i] );
   aContainers[i].addChild(aCargadores[i]).name = "loader: " + i;
   aCargadores[i].load( new URLRequest ( aDirecciones[i] ) );
   aCargadores[i].contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, aCargadores_onProgress );
   aCargadores[i].contentLoaderInfo.addEventListener(Event.COMPLETE, aCargadores_onComplete);
   function aCargadores_onProgress (evento:Event):void
   {
      //????????????????
   }
   function aCargadores_onComplete (evento:Event):void
   {
      var myLoader:Loader = Loader(evento.target.loader);
      myLoader.scaleX = 0.44;
      myLoader.scaleY = 0.44;
   }
}



El problema es que preciso identificar los eventos para poder aplicarles el evento.bytesLoaded.

Como puede verse en el código el Complete funciona de la manera planteada, pero si coloco la linea:

var myLoader:Loader = Loader(evento.target.loader);

dentro de la función de Progress el AS me retorna un errdo diciendo que todavía no existe un elemento suficientemente cargado para para dar esta información.

Alguna idea para resolver esto?

Desde ya muchas gracias. Claudio

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 02 Sep 2008 12:11 pm
Mmm, probaste:

Código ActionScript :

function aCargadores_onProgress (evento:Event):void 
   { 
      trace(evento.target+":"+evento.bytesLoaded)
   } 


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 Sep 2008 11:08 am
Jorge: colocando de esa forma tengo un Output así

[object LoaderInfo]:0
[object LoaderInfo]:0
[object LoaderInfo]:0
[object LoaderInfo]:28017
[object LoaderInfo]:30373
[object LoaderInfo]:32001

Lo que preciso es saber cual evento está siendo disparado para poder colocar este proceso de carga dentro de los TextField correspondientes (1, 2 y 3 en este ejemplo). Donde dice [object LoaderInfo] debería decir loader 0, loader 1 y loader 2.

Fijate como en el Complete se puede identificar cada loader:

Código ActionScript :

function aCarregadores_onComplete (evento:Event):void
{
   var myLoader:Loader = Loader(evento.target.loader);
   var myLoaderName:String = myLoader.name;
   var myNumber:uint = Number(myLoaderName.replace("loader: ",""));
   //trace (myNumber); // output: 2 1 0
   trace (myLoader.name); // output: loader: 2, loader 1 y loader 0
   myLoader.scaleX = 0.44;
   myLoader.scaleY = 0.44;
}

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 03 Sep 2008 11:42 am
Fíjate que le estás poniendo name

aContainers[i].addChild(aCargadores[i]).name = "loader: " + i;

Traza

trace(evento.target.name+":"+evento.bytesLoaded)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 Sep 2008 01:31 pm
Jorge, me devueve este error:

"Property name not found on flash.display.LoaderInfo and there is no defalult value"

Me parece que dá esto porque en realidad

evento.target es aCargadores[i].contentLoaderInfo y no aCargadores[i]. Entendés?

Claudio

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 05 Sep 2008 11:31 am
Puff, pensaba investigarlo pero no tengo tiempo (tendré que esperar a queme ocurra a mi ;)
Mientras tanto, usa distintos listeners

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 05 Sep 2008 11:49 am
Jorge, si tenés un tiempito quería que me expliques esta línea:

Código ActionScript :

var myLoader:Loader = Loader(evento.target.loader); 


en el Complete todo funciona porque fue definido este objeto.

Pensando un poco me parece que tendría que definir también un objeto LoaderInfo para poder identificar el evento de esta forma:

Código ActionScript :

var myLoaderInfo:LoaderInfo = LoaderInfo(evento.target.????)


Te pregunto el significado de aquella primera línea porque fue alguien del forum que la escribió y todabía no entendí bien que significa. Porque nunca vi construir una variable asi sin el New.
Él me dijo que podía hacer eso porque ya había sido instanciada encima.

Bueno, desde ya muchas gracias por tu tiempo

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 05 Sep 2008 12:09 pm
Es un puntero al Loader que generó el evento, para evitar que el compilador se queje, haces un Cast explícito a Loader
Usualmente intento hacer un for ... in a ver si tengo algo que me diferencie uno de otro, por ejemplo

var myLoader:Loader = Loader(evento.target.loader);
for(var i:* in myLoader) trace(i+":"+myLoader[i])

Si sale alguna propiedad que permita distinguirlos, ya tienes una punta. Por ejemplo name

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 05 Sep 2008 12:53 pm
Y eso no funciona para esta línea?

Código ActionScript :

var myLoaderInfo:LoaderInfo = LoaderInfo(evento.target.????)

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 05 Sep 2008 01:57 pm
loaderInfo es una propiedad de Loader que es el que genera el evento

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Sep 2008 11:45 am
Jorge no entendí tu solución de utilizar distintos listeners...cómo sería eso?

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 08 Sep 2008 04:55 pm
Todos los callbacks van a la misma función:

aCargadores[i].contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, aCargadores_onProgress );

Que por cierto se redeclara cinco veces al estar metida en el loop. De todas formas no me creo que el for ... loop no muestra nada distinto, aunque como no tengo tiempo de probarlo (ya me pasará y tendré que hacerlo) Lo que digo es que esa función tienen que ser cinco distintas, y cada listener apuntar a una de estas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 09 Sep 2008 08:06 pm
Jorge: metí este problema en un forum americano y me respondieron esto:

You want to add loaders to the dictionary (hash) identified by the URL (or, may be, if URLs may repeat, just envent some unique ID for every loader), and than check if the event's target is identified by that key in the dictionary like this:

Código ActionScript :

var hash:Dictionary = new Dictionary();
hash[myButton] = "myLoader's.url";
// later
myLoader.load(new URLRequest(hash[event.target]));


A mi se me juntó la falta de conocimientos suficientes de ingles y de AS.

Puede ser este el camino para solucionar el problema?

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 10 Sep 2008 12:37 am
Rebuscada respuesta si las hay: Pregúntale detalles a quien te haya respondido.

Para agregar distintos listeners puedes probar

//en el loop
aCargadores[i].contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, this["aCargadores_onProgress"+i);

//fuera del loop
function aCargadores_onProgress1 (evento:Event):void { ...}
function aCargadores_onProgress2 (evento:Event):void { ...}
etc

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Sep 2008 10:15 am
Jorge no te olvidés que la carga es dinámica, en este caso utilicé un array solo para poder mostrar el problema. En realidad la carga es a través de un XML de una lista de productos externos donde el número de los mismos es variable entonces no tengo como saber cuantos evt.target voy a tener.

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 10 Sep 2008 10:20 am
Volviendo atrás estaba mirando esta línea que se me pasó:

trace (myLoader.name); // output: loader: 2, loader 1 y loader 0

Es decir, ya tienes una forma de saber quien está llamando la función

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Sep 2008 06:44 pm
Jorge me parece que mi problema principal es que no consigo transmitr el problema.

Quien estubo mas cerca de resolver fuist tu cuando me mandaste a colocar esta línea:

Código ActionScript :

function aCargadores_onProgress (evento:Event):void  
{  
      trace(evento.target+":"+evento.bytesLoaded) 
}


El output me dió esto:

[object LoaderInfo]:0
[object LoaderInfo]:0
[object LoaderInfo]:0
[object LoaderInfo]:28017
[object LoaderInfo]:30373
[object LoaderInfo]:32001

Lo que es correcto. El problema es substituir [object LoaderInfo] por Loader 1, Loader 2, etc Necesito hacer esto para poder generar la ProgressBar correspondientes a cada evento y los TextFiel indicando el cargamento de cada uno de ellos

El problema es que myLoader.name no funciona dentro del Progress él apenas funcina dentro del COMPLETE

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox

 

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