Comunidad de diseño web y desarrollo en internet online

Ayuda con Arrays AS 3.0

Citar            
MensajeEscrito el 26 Abr 2010 04:03 pm
Hola, tengo una experiencia no demasiado avanzada pero suficiente en AS 2.0 y decidí pasarme a AS 3.0. Pero me encuentro con muchos problemas. Uno de los peores es:

Creo, desde la línea de tiempo, una fuente de partículas en una función que se ejecuta cada frame (similar a onEnterFrame de AS 2.0), y que los incluye previamente en un Array llamado myArray que he creado anteriormente con var myArray:Array = []:

Código ActionScript :

var par1:Particle = new Particle()
addChild(par1);
par1.x=50;par1.y=50;
myArray.push(par1);

var par2:Particle = new Particle()
addChild(par2);
par2.x=50;par2.y=50;
myArray.push(par2);


Cada partícula, por su cuenta, baja a un ritmo de 5 píxeles por frame.
Además, en la función similar a onEnterFrame, en la que se crean las partículas, incluí esto:

Código ActionScript :

for(var i:String in myArray)
{
        if(myArray[i].y>425){removeChild(myArray[i])}
}


y cuando se cumple la condición de removeChild(), empieza a dar errores. Esto en AS 2.0 habría ido bien, por qué ahora no?

El onEnterFrame ha sido creado por

Código ActionScript :

stage.addEventListener(Event.ENTER_FRAME,ef);


y el Array está fuera de cualquier otra función, donde se encuentra la creación del evento ENTER_FRAME.

Me podrían ayudar? Cómo puedo solucionar ese error?

Gracias de antemano

Por Dechcaudron

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Abr 2010 04:32 pm
No habría funcionado porque tu Array es un array de "Particle"s, NO de STRING. luego sería

Código ActionScript :

//TAMPOCO FUNCIONA
for (var mc:DisplayObject in myArray){
  if(mc.y>425){
       removeChild(mc)
  }
}  

y no funciona porque debes eliminar también el elemento del Array. Hazlo con un bucle simple

Código ActionScript :

for (var i:int=0;i<myArray.length;i++){
   if myArray[i].y>425){
      removeChild(myArray[i])
      myArray.splice(i,1)  //<---también eliminamos el elemento del array
  }
}

NOTA: Personalmente,
1.-si los mueves "por su cuenta" (en tu Clase Particle), los eliminaría en dicha clase -vamos, pondría la condición en el onEnterFrame de la pertícula-
2.-Realmente los movería TODOS en un único ENTERFRAME de la película principal -haciendo un bucle-

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Abr 2010 04:37 pm
Muchas gracias, pero, por qué necesariamente debo borrarlo de myArray? Podría poner:

Código ActionScript :

if(myArray[i].y>425 && myArray[i]!=undefined)
{//La función}


No?? en AS 2.0 me funcionaba. Buff... que lío. Es lo que tiene modernizarse jaja. Gracias de todas formas.

Por Dechcaudron

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Abr 2010 09:34 am
Que lo hayas eliminado de la displayList no significa que deje de existir, pero sí podrías hacer alguna condición con "contains" o ponerlo todo bajo un try{..}catch{..}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Abr 2010 01:13 pm
De acuerdo, muchas gracias :)

Por Dechcaudron

8 de clabLevel



 

firefox

 

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