Comunidad de diseño web y desarrollo en internet online

Array de objetos Sprite

Citar            
MensajeEscrito el 22 May 2010 03:23 am
¡Hola a todos!.. Vuelvo a necesitar vuestra ayuda de nuevo (demasiado pronto, quizá). Esta vez intento programar una Array de objetos Sprite, cada uno cargado con una imagen PNG. La idea es tener una lista ordenada y fácil de usar.

Este sería mi código:

Código ActionScript :


      public function CargarSprites():Array {
         
         var ArrayEnlaces:Array = new Array();
         var ArraySprites:Array = new Array();
         var CargaImagen:Loader = new Loader();
         var SpriteActual:Sprite;         
         var i:Number = 0;
         
         cargarEnlaces();
         
         for (i = 0; i < ArrayEnlaces.length; i++) {
            
            CargaImagen.load(new URLRequest(ArrayEnlaces[i]));
            SpriteActual = new Sprite();            
            
            CargaImagen.contentLoaderInfo.addEventListener(Event.COMPLETE, alCompletar);
            
         }
         
         return ArraySprites;
         
         function alCompletar(evt:Event) {
            SpriteActual.addChild(CargaImagen[i].content);
            ArraySprites.push(SpriteActual);
         }
         
         function cargarEnlaces() {
            
            ArrayEnlaces.push("Enlace1.png");
            ArrayEnlaces.push("Enlace2.png");
            ArrayEnlaces.push("Enlace3.png");
            ArrayEnlaces.push("Enlace4.png");
            ArrayEnlaces.push("Enlace5.png");      
            
         }
         
      }



Pero recibo un error al compilar que no sé qué significa:

ReferenceError: Error #1069: No se encontró la propiedad 10 en flash.display.Loader y no hay ningún valor predeterminado.
at MethodInfo-13()


Por cierto, una cosa más. Aún no entiendo muy bien cómo hace el ordenador la lectura del script. En mi código añado un Listener que controle que espere que el objeto Loader haya terminado de cargar. ¿Pero qué ocurre con la lectura del script?.. ¿Se mantiene pausada hasta que termina o prosigue y más tarde lanza la función cuando acaba de cargar?. Siento si mis preguntas son muy obvias. Soy bastante novato.

¡Muchas gracias!

Por Pedrock

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 May 2010 10:43 am
Puff, por partes
El error te lo dá cuando escribes

Código ActionScript :

CargaImagen[i]

CargaImagen es un loader, no es un array de loaders.

Aclarado este punto, cuando hacemos un loader.Load(), lo que hacemos es "mandar a cargar". Vamos, NO espera a que se cargue para continuar con la siguiente instrucción. Por eso, un bucle del tipo

Código ActionScript :

for (i = 0; i < ArrayEnlaces.length; i++) {  
    CargaImagen.load(new URLRequest(ArrayEnlaces[i]));
    SpriteActual = new Sprite();
    CargaImagen.contentLoaderInfo.addEventListener(Event.COMPLETE, alCompletar); 
}

NO va a funcionar NUNCA, puesto que antes de que haya acabado de cargar, ya está crganado el siguiente. Idénticamente, al final del bucle la variable "i" va a valer siempre 5.

Otra cosa es que no debemos poner una función dentro de otra función. Vamos, el "esquema" de tu código debería ser

Código ActionScript :

public function CargarSprites():Array {...}
function alCompletar(evt:Event) { ...}
function cargarEnlaces() {...}

TRES funciones separadas.

Y por último, si una variable la declaras DENTRO de una función, sólo tendrá valor dentro de dicha función.

Vale, después de todo este rollo, ¿cómo lo hacemos? El modo más sencillo es tener el array de Sprites que sea común a todos. Vamos, lo declararemos fuera de cualquier función.
1.-Tendremos una función que recibe un array de Enlaces
2.-Crearemos un bucle. DENTRO de ese bucle crearemos un nuevo Loader, que cargará la imagen png
4.-Crearemos una función "alCompletar" que servirá para TODOS los loaders creados que lo que hará será un "push" al array de Sprites

Código ActionScript :

//el arraySprites será común a todas, lo declaramos fuera
var ArraySprites:Array = new Array(); 
//nuestra función CargarSprites recibe como argumento un array, no devuelve nada
public function CargarSprites(ArrayEnlaces:Array{ 
  for (i = 0; i < ArrayEnlaces.length; i++) { 
     var loader:Loader=new Loader() //<--creamos un loader cada vez
     loader.load(new URLRequest(ArrayEnlaces[i]));
     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, alCompletar);                      
   } 
}
//la función "alCompletar" se declara FUERA
private function alCompletar(e:Event){
      var sprite=new Sprite()
      //nos referimos al loader.contenrLoaderInfo en concreto mediante
      //e.target
      sprite.addChild(e.target.content); 
      ArraySprites.push(sprite)
}


Vale, con esto NO controlamos cuándo se ha cargado todas las imágenes y hemos hecho "global" el arraySprites

Por Eliseo2

710 de clabLevel



 

msie8
Citar            
MensajeEscrito el 22 May 2010 11:54 am
Muchas gracias.

Que gran error el mio el de...

Código ActionScript :

CargaImagen[i] 

.. me avergüenza.

Sí, ya compila perfectamente. Y debo suponer que el Array se carga de Sprites satisfactoriamente. Pero como decías, no puedo usarlo porque no sé cuando termina de cargar. Tengo que buscar alguna forma de hacer esperar al script.

Por Pedrock

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 May 2010 06:45 am
Si lo que quieres es hacer una "carga secuencial", En FlashandMath tienen una Clase ImagenLoaderClass que sirve precisamente para eso

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Jul 2010 08:29 pm
Bueno, ya puedo hacer arrays de sprites sin problema.

Ahora estoy intentando hacer arrays de sonidos (MP3's). Pensaba que sería igual, pero para nada.. ¿Alguien sabe cómo hacerlo?

Por Pedrock

8 de clabLevel



 

firefox

 

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