Comunidad de diseño web y desarrollo en internet online

Cambiar las propiedades de todos los child de una clase

Citar            
MensajeEscrito el 02 Jun 2010 09:33 pm
Pues eso, he añadido unas 50 instancias con as3.0, con el metodo addchild y un loop for, pero si despues cambio una propiedad solo afecta a la ultima de ellas.¿Porque?

Por Luis Borja

17 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Jun 2010 09:46 pm
Nadie sabe nada sobre esto?

Por Luis Borja

17 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Jun 2010 12:12 am
Movido al foro de AS3, donde obtendrás mejores respuestas.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

chrome
Citar            
MensajeEscrito el 03 Jun 2010 07:31 am
Procura postear código, porque a ciegas es complicado ver el problema.
De todos modos por lo que dices me imagino que el problema será que estás usando la misma variable auxiliar para hacer el addChild, y por eso sólo afecta al último.
Tienes que guardar en un array (o en un vector) tus clips, y después con un bucle les cambias la propiedad. Ejemplo:

Código ActionScript :

//Array donde se guardarán las referencias a tus clips:
var clips:Array = [];

//Creamos 50 instancias del clip (en este ejemplo el MovieClip de la biblioteca está asociado a una clase llamada Clip):
for (var i:uint = 0; i < 50; i++)
{
   var auxClip:MovieClip = new Clip();
   this.addChild(auxClip);
   auxClip.x = 10 * i;
   clips.push(auxClip);
}

//Con un bucle cambiamos la propiedad alpha de todos ellos:
for (i = 0; i < clips.length; i++)
{
   clips[i].alpha = 0.2;
}

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 03 Jun 2010 07:53 am
Perdona Isidoro mi codigo es este:

// creo un loop for para hacer una cuadricula de Sprites ( en este caso 550 sprites. 55x10)

var filas:int = 55;
var columnas:int =10;

for (var py:int=0; py<filas; py++)
{
for (var px:int=0; px<columnas; px++)
{
var cuadradito:Sprite = new Sprite();
cuadradito.graphics.beginFill(Math.random()* 0xffffff)); // Para diferencias un sprite de otro les doy un color aleatorio
cuadradito.graphics.drawRect(0, 0, 10, 10);
cuadradito.graphics.endFill();
cuadro.x = cuadro.width*py;
cuadro.y = cuadro.height*px
addChild(cuadro); // Otra duda q tengo es que si en esta linea coloco " stage.addChild(cuadro)" da error ¿pq?, sin
embargo "this.addChild(cuadro)" no produce error. No se porq, ¿no es stage el container de
cuadro??
}
}

Bueno con esto tenemos todas las intancias en pantalla, ahora tengo el problema, si por ejemplo hago esto

var myTimer:Timer= new Timer(1,360);
myTimer.addEventListener(TimerEvent.TIMER, girar);
myTimer.start();

function girar(event:TimerEvent):void
{
cuadro.rotation +=1;
}


// El problema es que solo gira el último...

Por Luis Borja

17 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Jun 2010 07:56 am
Perdon cuadradito es = a cuadro, es que en mi ejercicio era cuadro y aqui quise poner cuadradito para ser mas claro y al final lo lie, pero se refiere a la misma variable, hay que cambiiar o el codigo dara error, cambiar cudrado por cuadradito o viceversa

Por Luis Borja

17 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Jun 2010 08:06 am
De todas formas mi intencion no es moverlo todo de una vez, en realidad el proposito es que vayan cambiando la propiedad (rotation en este caso), por filas y de izq a der, lo intente con una funcion q se activara al igualar la propiedad x del Sprite y
de otro Sprite diferente que anime de izq a der, pero no me funciono. Por eso que aiocabe intentado descubir como acceder a las propiedades, pero la intencion mia es esto último q explique.
Gracias por la ayuda.

Por Luis Borja

17 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Jun 2010 10:42 am
Ya pude cambiar la propiedad para todas las instancias gracias al Array, pero si quiero cambiar solo las de una determinada fila??? en un intervalo igual para todas las filas??.
ya digo q lo intente comparando la propiedad x de un sprite q se movia de lado a lado de la pantalla. Alguien sabe aplicar este ejemplo, o si conoce otra forma...

Por Luis Borja

17 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Jun 2010 02:11 pm
En primer lugar, por lo que veo a lo que tú llamas filas son realmente las columnas, y viceversa.
Eso que comentas del stage se produce cuando intentas acceder al stage antes de haber añadido el objeto a la visualización.
Para tratar de forma diferente a filas y a columnas, tienes que usar un array bidimensional (bueno, en realidad podrías hacerlo con uno unidimensional, pero es menos intuitivo). Aquí te dejo un ejemplo:

Código ActionScript :

var filas:int = 10;
var columnas:int = 55;
var cuadros:Array;

function creaTablero():void
{
   cuadros = new Array(filas);
   for (var py:int = 0; py < filas; py++)
   {
      cuadros[py] = new Array(columnas);
      for (var px:int = 0; px < columnas; px++)
      {
         var cuadro:Sprite = new Sprite();
         cuadro.graphics.beginFill(Math.random()* 0xffffff);// Para diferencias un sprite de otro les doy un color aleatorio
         cuadro.graphics.drawRect(0, 0, 10, 10);
         cuadro.graphics.endFill();
         cuadro.x = cuadro.width * px;
         cuadro.y = cuadro.height * py;
         this.addChild(cuadro);
         cuadros[py][px] = cuadro;
      }
   }
}

creaTablero();

var myTimer:Timer = new Timer(1, 360);
myTimer.addEventListener(TimerEvent.TIMER, girarFila);
//Cambia la anterior línea por esta 
//myTimer.addEventListener(TimerEvent.TIMER, girarColumna);
myTimer.start();

function girarFila(event:TimerEvent):void
{
   var numeroFila:int = 8;
   for (var i:int = 0; i < cuadros[numeroFila].length; i++)
   {
      cuadros[numeroFila][i].rotation += 1;
   }
}

function girarColumna(event:TimerEvent):void
{
   var numeroColumna:int = 8;
   for (var i:int = 0; i < cuadros.length; i++)
   {
      cuadros[i][numeroColumna].rotation += 1;
   }
}

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 03 Jun 2010 04:18 pm
no entiendo esas variables numerofilas y numerocolumnas que al principio determinas con el valor 8.
doble Array? jejej acabo de descubrir la simple :shock:
no hay una manera mas sencilla?. Yo queria hacer un Sprite que corriese de izq a derecha(olvidemos el timer) y hacer que si el valor x(posicion en el eje X) de ese Sprite y el de los "cuadraditos" coincide, que estos varien alguna propiedad. Es posible?
Muchisimas gracias de antemano.

Por Luis Borja

17 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Jun 2010 11:04 pm
numeroFila y numeroColumna son 2 ejemplos para que veas cómo hacer que rote toda la fila 8 o toda la columna 8. Si juegas un poco con ello conseguirás el efecto que quieres.

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox

 

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