Comunidad de diseño web y desarrollo en internet online

concatenar una ruta con un movieclip

Citar            
MensajeEscrito el 11 Nov 2008 12:16 pm
Hola a todos,
tengo una duda, como podria convertir un string en parte de una ruta hacia un objeto?
os pongo un ejemplo:

tengo en el stage varios botones con nombre de instancia btn1, btn2, ...

miFuncion("textoMc.textoTxt", "inicio", btn1);

function miFuncion(texto:String, cadena:String, boton:MovieClip):void{
btn1.textoMc.textoTxt.text = cadena; //quiero hacer esto pero concatenando el parametro boton con el paremetro texto
}

Gracias

Por oscarlosan

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Nov 2008 02:04 pm
Si el botón está en la misma línea de tiempo, haces

this[boton.name].textoMC.xxxxxx

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Nov 2008 03:27 pm
eso funciona correctamente pero dentro de la funcion no quiero utilizar:
textoMC.textoTxt

quiero utilizar el parametro:
texto

seria una cosa parecida a esto:
this[boton.name].textoMc.textoTxt.text = cadena; //lo que tu me propones (q es correcto)
this[boton.name].texto.text = cadena; //texto = "textoMc.textoTxt" //logicamente esta mal

Por oscarlosan

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Nov 2008 03:39 pm
Sigue evaluando:

this[boton.name][texto.split(".")[0]][texto.split(".")[1]]

Aunque si las rutas que pasas como texto tienen mas niveles, deberás darle una vuelta extra

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Nov 2008 12:52 pm
vale lo voy a probar y te cuento.
gracias.

Por oscarlosan

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Nov 2008 09:46 am
funciona bien.
Hay algo que no sepas?


Muchas gracias.

Por oscarlosan

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Nov 2008 11:07 am
otra preguntita

Estoy utilizando with:

with(this[boton.name]){
[texto.split(".")[0]][texto.split(".")[1]].text = cadena; //como podria hacer algo asi ?
}

Por oscarlosan

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Nov 2008 04:53 pm
Si todo ese parseo de texto termina en una referencia a un textfield, pues

this[el parseo de texto].text = cadena

Traza lo que te está quedando a ver si tiene sentido

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Nov 2008 09:10 am
Haber, esto funciona (como ya me explicaste anteriormente):

Código :

miFuncion("texto_mc.menu_txt", "inicio", btn1);
function miFuncion(texto:String, cadena:String, boton:MovieClip):void{   
   this[boton.name][texto.split(".")[0]][texto.split(".")[1]].text = cadena;
}


pero si le paso un array:

Código :

var boton:Array = new Array(btn1,btn2,btn3); //array de MCs que estan en el stage
miFuncion("texto_mc.menu_txt", "inicio", boton);
function miFuncion(texto:String, cadena:String, boton:Array):void{   
        //he probado estas 3 formas y ninguna de ellas funciona
        this[boton[0]][texto.split(".")[0]][texto.split(".")[1]].text = cadena;
   this[boton.name[0]][texto.split(".")[0]][texto.split(".")[1]].text = cadena;
        this[boton[0].name][texto.split(".")[0]][texto.split(".")[1]].text = cadena;
}


me tira el siguiente error:
Error #1010: Un término no está definido y no tiene propiedades.

Por oscarlosan

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Nov 2008 09:13 am
En teoría llegarías a encontrar la referencia, pero lo veo muy rebuscado

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Nov 2008 09:58 am
Hay alguna otra forma de hacer esto?
Si pongo la ruta en la función esta claro que funciona a la perfección, pero no quiero modificar la funcion cada vez que cambio el nombre de los clips o campos de texto que hay dentro del boton. Por eso lo de pasar la ruta.
gracias.

Por oscarlosan

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Nov 2008 10:23 am
Traza la ruta a ver si lo que sale del parseo tiene sentido, el error es porque probablemente alguno de ellos no fue bien, dándole vueltas a los splits llegarás a ello

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Nov 2008 11:29 am
finalmente lo he coseguido :) :

trace([boton[0]]); //SALIDA: [object btn_1]
trace([boton[0].name]); //SALIDA: btn1
trace(this[boton[0].name][texto.split(".")[0]][texto.split(".")[1]]); //SALIDA: [object TextField]
this[boton[0].name][texto.split(".")[0]][texto.split(".")[1]].text = cadena;

pero si ahora lo quiero convertir en una clase:
this[boton[0].name] ....
Dentro de una clase que debo poner en lugar de this, ya que this me devuelve el nombre de la clase: [object botones]

Por oscarlosan

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Nov 2008 12:29 pm
Si tu clase es la que tiene los botones sigue siendo "this", si no, no entiendo eso de "convertirlo en una clase"

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Nov 2008 01:06 pm
No, a la clase le paso los botones por parametro. Seria una cosa asi:

var boton:Array = new Array(btn1,btn2,btn3);
var but:Botones= new Botones("texto_mc.texto_txt", "inicio", boton);

y en la clase:
...
public class Botones extends MovieClip {
public function Botones(texto:String, cadena:String, boton:Array):void{
this[boton[0].name][texto.split(".")[0]][texto.split(".")[1]].text = cadena; //se puede hacer???
}
}
...

Esto es una ejemplo simple, se que me direis que habria que pasar texto para cada boton pasando un array, añadir listners a cada boton recorriendolo el array de botones, ... pero eso es facil de hacer. Yo quiero saber si puedo acceder dentro de una clase a: this[boton[0].name] mediante la notacion de array.

Gracias por vuestra ayuda.

Por oscarlosan

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Nov 2008 03:09 pm
Echalé un vistazo a lo dicho en este post
Aunque ya comento que, cuando hacemos cosas de este tipo nos estamos cargando un poco lo que es OOP en el sentido que deberíamos tratar de hacer que un Mc/Objeto sólo se cambie desde el MC/Objecto al que pertenece.
Si no lo estamos haciendo así, quizá esté mal resuelto nuestro planteamiento(*). Por ejemplo, podemos tener una clase Botones que extienda de Sprite y es allí donde tenemos los botones (por supuesto habrá que meter en la displayDist nuestro objeto botones), en lugar de tener una clase que controle unos botones que le son ajenos.
(*)Es sólo una opinión personal, no digo que esté mal, que no funcione o no sea correcto, es sólo que me parece que "forzamos" un poco las cosas

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Nov 2008 03:13 pm
vale le voy a echar un vistazo. Gracias Eliseo

Por oscarlosan

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Nov 2008 04:37 pm
pues sí, es un tip genial :o . De las 3 soluciones que distes en el tip MovieClip(_padre) que me parecio la más interesante. Pero me queda la duda de la buena OOP que es la tercera opcion y que no desarrollaste en el tip.

Vuestras soluciones son mejores que las de muchos libros. Gracias por tu tiempo Eliseo2.

Por oscarlosan

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Nov 2008 08:12 am
La tercera opción de hacer las cosas como OOP, depende del problema específico. En el ejemplo del post MasterXP tenía una Clase que generaba un número aletorio y cambiaba el valor de una caja de texto del Stage. Otra duda que vi en este mismo foro es que se tenía una clase Botones que cambiaba el estado de otros botones del mismo tipo.
En mi opinión, clases de este tipo no están demasiado bien formadas en el sentido de que cambian el valor de algo que NO le es propio.
Podemos "repensar" el problema. p.e. la solución al primero puede ser que la clase sólo devuelva un valor aleatorio, y para el segundo problema tener una Clase Menu a la que pertenezcan los botones y que sea la Clase Menu la que cambie el estado de los botones. A eso me refiero con mejor o peor formado OOP. siempre digo que no hay que ser demasiado "purista" y llevar las cosas a extremo, pero hay veces que el "repensar" las cosas nos puede llevar a una mejor solución en el sentido de una solución más escalable, o más re-utilizable.

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Nov 2008 10:53 am
Gracias, a quedado muy claro.

Por oscarlosan

73 de clabLevel



 

firefox

 

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