Comunidad de diseño web y desarrollo en internet online

Instancias, referencias y objetos

Citar            
MensajeEscrito el 25 Mar 2010 11:59 am
Tengo una duda que me parece muy tonta pero que me está haciendo perder ya mucho tiempo...
La cosa es que si se hace algo así:

Código ActionScript :

var array:Array = new Array();

for (var i:int = 0; i<5; i++){
    array[i] = new Sprite();
}


todos los sprites que quedan en el array apuntan a un mismo objeto, de manera que si más adelante interactúo con alguno de esos sprites, se modifican todos.
Cómo hago para que sean distintos objetos? :S

Por ChiGaTTa

17 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Mar 2010 12:29 pm
No debería ocurrir, de hecho puedes probar a escribir

Código ActionScript :

for (var i:int = 0; i<5; i++){ 
    array[i] = new Sprite();
    array[i].name=i 
    array[i].x=Math.random()*120
}
trace(array[0].x+":"+array[1].x)

Verás que el "trace" te da distintos valores.

Si quieres, puedes cambiar el bucle y usar un push, pero ya te digo que no DEBERÍA suceder(*)

Código ActionScript :

for (var i:int = 0; i<5; i++){ 
    array.push(new Sprite());
}

(*)Siempre que digo "no DEBERIA" hay una posibilidad grandísima de equivocarme (al fin y al cabo tú has sido quien has visto el problema)

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Mar 2010 12:45 pm
Buff, pues este problema me está llevando de cabeza X_x No entiendo porqué me los coge como si fuesen uno sólo, ya no se me ocurre qué probar. Se supone que dentro de cada uno de esos sprites cargo una imagen, que es la misma, pero la necesito con distintas propiedades en un mismo instante de tiempo, para ello los distintos sprites. El caso es que si cambio la posicion de uno de esos sprites, cambia la de todos.
También pensé que podía ser la imagen cargada en los sprites la que sigue siendo la misma en todos, porque sólo la cargo una vez, pero lo hago de esta manera:

Código ActionScript :

tempObj = new Bitmap(Bitmap(event.target.content).bitmapData);
array[i].addChild(tempObj);

Teniendo en cuenta que tempObj es un bitmap y que esas líneas de código se encuentran dentro de la correspondiente función que recoge el evento de carga de la imagen.

Ya no sé dónde más buscar :(

Por ChiGaTTa

17 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Mar 2010 03:18 pm

ChiGaTTa escribió:

El caso es que si cambio la posicion de uno de esos sprites, cambia la de todos.

Haz una prueba manual

Código ActionScript :

array[0].x=100
array[1].x=200

ChiGaTTa escribió:

También pensé que podía ser la imagen cargada en los sprites la que sigue siendo la misma en todos, porque sólo la cargo una vez, pero lo hago de esta manera:

Código ActionScript :

tempObj = new Bitmap(Bitmap(event.target.content).bitmapData);
array[i].addChild(tempObj);

Teniendo en cuenta que tempObj es un bitmap y que esas líneas de código se encuentran dentro de la correspondiente función que recoge el evento de carga de la imagen.

Supongo que lo harás en un bucle

Código ActionScript :

for (i=0;i<array.length;i++){
   tempObj = new Bitmap(Bitmap(event.target.content).bitmapData);
   array[i].addChild(tempObj);
}


NOTA:Voy a decir una tontería, pero es que no se me ocurre que puede pasar:
Para referirnos a un elemento del array debemos escribir

Código ActionScript :

array[0].x=200
//ó
array[3].y=300
//ó
j=1
array[j].width=400;

NO nos podemos referir al TODOS los objetos del Array o que todos hagan lo mismo. Bueno, sí se hace a través del método forEach(), o mediante un bucle

Código ActionScript :

array.foEach(posicion,me)
function posicion(me:MovieClip){
   me.x=100*Math.random()   
}


NOTA2:El problema está EN OTRO LADO de tu código. Vigila que no tengas una variable o MC definida también con el nombre de array, o cambia el nombre de tu Array por algo como "arraySprites"

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Mar 2010 10:45 pm
Muchas gracias por tu atención Eliseo2!
La verdad es que siempre trato de buscar en todos los rincones antes de pedir ayuda, pero cuando acabo desesperada puede que el error sea algo que se escapa a mis conocimientos.
Me he pasado la mañana atascada en ese fallo y todo era culpa mía (como de costumbre =P). Se me había escapado colocarle un evento enterframe a cada uno de esos sprites, dentro de un bucle, cuando sólo debía tenerlo el primero. Son tonterías pero a veces se hacen difíciles de localizar, sobretodo si buscas donde no debes y pasas el fallo por alto cada vez que miras esa parte de código.
Al menos se forja experiencia a base de fallar. De nuevo gracias por tratar de ayudarme y aclararme las dudas ^^

Por ChiGaTTa

17 de clabLevel



 

firefox

 

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