Comunidad de diseño web y desarrollo en internet online

Como nombrar variables dinam. y crear intancias de clases dinamicas?

Citar            
MensajeEscrito el 31 Oct 2012 09:09 pm
El ejemplo de código es el siguiente:

for (var i:uint=0; i < 6; i++)
{
var ["sev"+i]:MovieClip = new ["serv" + i];
addChild("sev"+i);
}

El código corre en la linea de tiempo principal, básicamente lo que busco, es crear instancias de diferentes clases y ponerlas en el escenario de manera dinámica. Es decir en la biblioteca tengo varios movieclips asignados a diferentes clases: serv1, serv2, serv3... Entonces lo que quiero que haga el código es que me cree una instancia de la clase serv1 y la nombre sev1, que incremente el contador i y entonces me cree la instancia de la clase serv2 y la nombre sev2, y así sucesivamente. Adicionalmente que las vaya poniendo en el escenario.

Sin embargo al correr el código el compilador me dice que encuentra como error la parte entre corchete en que intento nombrar la variable.

Esperó alguien conozca como puedo lograr esto, o me sugiera alguna alternativa. En todo caso muchas gracias.

Por Eeck

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 01 Nov 2012 01:51 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Nov 2012 04:15 pm
Antes que nada, gracias Jorge
Pero ya habìa considerado la opciòn getChildByName, sin embargo el problema que encuentro es que esto sólo me ayudaria una vez haya citado los movieclips de las clases respectivas. Es decir que si tengo 100 moviclips en la biblioteca del documento flash swf, tendrìa primero que crear cada instancia y luego si configurar su nombre.

var sev1:MovieClip = new serv1 //Donde sev1 es la variable que asigno a la instancia de un Movieclip que tengo en la biblioteca cuya clase es serv1

Por Eeck

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 01 Nov 2012 04:27 pm
Antes que nada, gracias Jorge

Pero ya habìa considerado la opciòn getChildByName, sin embargo el problema que encuentro es que esto sólo me ayudaria una vez haya citado los movieclips de las clases respectivas. Es decir que si tengo 100 moviclips en la biblioteca del documento flash cs5 swf, tendrìa primero que crear cada instancia y luego si configurar su nombre:

var sev1:MovieClip = new serv1
sev1.name = s1;

var sev2:MovieClip= new serv2
sev2.name = s2;

var sev3:MovieClip= new serv3
sev3.name = s3;

var sev4:MovieClip= new serv4
sev4.name = s4;

var sev5:MovieClip= new serv5
sev5.name = s5;

var sev6:MovieClip= new serv6
sev6.name = s6;

// Asì hasta llegar a 100

Donde sev1 es la variable que uso para crear instancia de un Movieclip que tengo en la biblioteca cuya clase es serv1, sev2 es la variable que uso para crear la instancia de un Movieclip que tengo en la biblioteca y cuya clase es sev2 distinta de serv1, y asì sucesivamente.

Por eso estoy buscando evitar escribir casi que el mismo còdigo por cada movieclip cuya instancia quiero crear.

Por Eeck

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 01 Nov 2012 05:00 pm
Yo haría algo asi;

Código ActionScript :

         var elements:Array = new Array();
         for (var i:uint=0; i < 6; i++)
         {
            var ClassReference:Class = getDefinitionByName("serv"+i) as Class;
            elements.push(new ClassReference());
         }


Accedo a las instancias luego por posicion dentro del Array

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Nov 2012 09:48 pm
Muy buena solución, no conocía getDefinitionByName, y por supuesto con el array se soluciona la definición de la variable. Muchas gracias Jorge.

Por Eeck

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 06 Nov 2012 10:01 pm
la función quedo finalmente así

function inclUsion(nombre:String, limite:int):void
{
var elements:Array = new Array();
var salto:Array = new Array();
var sancho:Array = new Array();
var porancho:Array=new Array;

for (var m:uint=0; m < limite; m++)

{
var ClassReference:Class = getDefinitionByName(nombre+m) as Class;
elements.push(new ClassReference());

salto[m]=elements[m].height;
sancho[m]=elements[m].width;

porancho[m]=((sancho[m]*100)/salto[m]);

elements[m].height=(btnarray[m].height*70)/100;

elements[m].width=((elements[m].height*porancho[m])/100);

trace ("alto",m,":", elements[m].height, "ancho", m, ":", elements[m].width, "porcentaje ancho",m,porancho);


elements[m].x=((btnarray[m].width/2)-(elements[m].width/2)+((btnarray[m].width*25)/100));
elements[m].y=(((btnarray[m].height-elements[m].height)/2)-btnarray[m].height);
btnarray[m].addChild(elements[m]);


}
}

inclUsion("serv");

Con esta función es posible anidar dentro de una serie de movieclips, otra serie de movieclips, algunas variables que aparecen son para reconocer la proporción de los elementos de la serie de movieclips que se desean anidar, y así poder escalarlos al tamaño deseado sin que se vayan a deformar. ( porancho[m] en este array se alamacena la constante de proporcion) btn array contiene los movieclips que funcionaran de contenedores.
Los parametros de la funcion son el nombre de la clase con la que estan realcionados los movieclips, y que debe escribirse en entre comillas (nombre). (en mi caso se llama serv) y el numero de articulos. (limite)

Quizas a alguien le pueda servir, debo de dar credito a Jorge, que me indico la instruccion getDefinitionByName

Por Eeck

3 de clabLevel



 

chrome

 

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