Comunidad de diseño web y desarrollo en internet online

Nombres de variables diferentes con un for

Citar            
MensajeEscrito el 03 May 2010 11:31 am
Hola,

Estoy añadiendo un mismo objecto de la biblioteca 10 veces con un addChild i un for. Para ello hago:

Código ActionScript :

for(x=0; x<10; x++){
   var carro:objecto_biblioteca=new objecto_biblioteca();   
   addChild(carro);
}

Ahora todas las instancias que creo se llaman "carro". Hay alguna manera para que con el for les pueda poner un nombre diferente dinàmicamente? Algo tipo esto, pero que funcione :oops:

Código ActionScript :

 var ("carro"+x):objecto_biblioteca=new objecto_biblioteca();


Gracias!

Por carmecirera

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 May 2010 11:59 am

Código ActionScript :

for(x=0; x<10; x++){ 
   this["carro"+(x+1)]=new objecto_biblioteca();    
   addChild(carro); 
}

Esto hará que las variables se llamen carro1, carro2, carro3 etc..

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 03 May 2010 02:12 pm
Sólo una ADVERTENCIA. en AS3 lo que tenemos son "variables que hacen referencia a MCs". Así que lo que haces es tener unas "variables que hacen referencia a". Por cierto que sería

Código ActionScript :

for(x=0; x<10; x++){  
   this["carro"+(x+1)]=new objecto_biblioteca();     
   addChild(this["carro"+(x+1));  
}

En AS3, a un DisplayObject (o algún objeto -instancia- que proceda de una clase que sea DisplayObject o de alguna clase que extienda de DisplayObject -Sprite, MovieClip, Loader...-) nos podemos referir
1.-Mediante una variable, tal y como indica Zguillez
2.-Idénticamente lo podemos meter en un array
3.-Si le damos valor a su propiedad "name", mediante getChildByName. ¡OJO! la propiedad "name" NO TIENE NADA QUE VER con el "nombre de instancia"

Código ActionScript :

for(x=0; x<10; x++){ 
   var carro:objecto_biblioteca=new objecto_biblioteca(); 
   //le damos valor a la propiedad "name"
   carro.name="carro"+x   
   addChild(carro); 
}
//En cualquier momento podríamos escribir
x=0
var carro_ref:objeto_biblioteca=getChildByName("carro"+x) as objeto_biblioteca //(*)
//Ahora con, nuestra nueva variable, p.e.
carro_ref.x=300

(*)ese "as objeto biblioteca" Se llama "conversión de cast", que indica que nuestro "carro_ref" no es sólo un DisplayObject sino un objeto de tipo "objeto_biblioteca"
4.-Si sabemos su "depth", mediante getChildAt. idénticamente debemos usar una conversión de cast luego

Código ActionScript :

for(x=0; x<10; x++){ 
   var carro:objecto_biblioteca=new objecto_biblioteca(); 
   //le damos valor a la propiedad "name"
   carro.name="carro"+x   
   addChildAt(carro,x); 
}
//En cualquier momento podríamos escribir
x=0
var carro_ref:objeto_biblioteca=getChildAt(x) as objeto_biblioteca
//Ahora con, nuestra nueva variable, p.e.
carro_ref.x=300

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 May 2010 08:36 am
Gracias por vuestras respuestas, se agradecen mucho ^^

Pero de todas formas, si voy por la vía rápida y hago lo que dice Zguillez

Código ActionScript :

for(x=0; x<10; x++){   
   this["carro"+(x)]=new objecto_biblioteca();      
   addChild(this["carro"+(x)]);   
} 


No puedo hacer, por ejemplo, carro0.x=300
Me aparece el error: 1120: Acceso a una propiedad carro0 no definida. :(

Por carmecirera

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 May 2010 02:00 pm
:glups: lo acabo de probar y es cierto. Personalmente, ya que me gustan mucho los arrays escribiría algo como

Código ActionScript :

var arrayCarros:Array=new Array()
for(x=0; x<10; x++){ 
   var carro:objeto_biblioteca=new objecto_biblioteca();       
   arrayCarros.push(addChild(carro));    
} 
//Y ya tengo
arrayCarros[0].x=100

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 May 2010 07:53 am
Me gusta la solución :) También encontre otra para ir a lo ràpido, que no es siempre lo más elegante...

En vez de llamar al objeto carro0.x = 300 lo llamo this["carro0"].x = 300
(el this es el equivalente del eval de as2)

Muchas gracias :)

Por carmecirera

9 de clabLevel



 

firefox

 

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