duplicateMovieClip() | |
Mas de una vez duplicamos un objeto en nuestro escenario utilizando Ctrl-D. Y logramos ver n veces la animación.
|
|
Esto se puede hacer en forma dinámica y en este caso no pensemos solo en clip de películas. Pensemos en multiplicar dinámicamentes lineas de texto, campos, listbox's, etc. | |
La utilizanción de duplicateMovieClip()
se pontencia con la utilización de eval, que nos permitiría usar un
string (cadena de texto) para asignar el nombre de una nueva animación.
|
|
En los tutoriales o manuales de AS encontramos que duplicateMovieClip() tiene los siguientes parámetros: | |
duplicateMovieClip(target, newname, depth)
|
|
Donde | |
target:
|
ruta y nombre del objeto a duplicar |
newname:
|
nombre del nuevo objeto (identificador) |
depth:
|
nivel de profundidad |
Debemos
tener cuidado con el último parámetro (depth) ya que especifica el
nivel de la animación y este tiene un orden de apilamiento similar al
de las capas, por lo tanto el objeto duplicado en un nivel 2 va a tapar
al que fue duplicado en el nivel 1.
|
|
Veamos un ejemplo de como usar duplicateMovieClip()...
|
|
Agreguemos en nuestro nuevo escenario un campo texto tipo "Introducción de Texto" y pongamos como nombre de instancia iInput. | |
Luego en una capa superior agregamos el siguiente AS:
|
|
duplicateMovieClip('iInput','Nombre',1); | |
Nombre._y=40; | |
duplicateMovieClip('iInput','Apellido',2); | |
Apellido._y=80; | |
stop(); | |
Veamos algo mas complejo para entender un poco mejor la posibilidad que brinda duplicateMovieClip()... | |
Utilizando
este AS podremos ver que ahora aparecen 4 campos mas donde podemos
ingresar información y obviamente luego podemos procesarla...
imaginen.. un formulario dinámico, que según de donde se requiere se
crean mas o menos campos, claro que no solo se pueden duplicar campos
textos, también podemos duplicar cualquier componente de la librería de
Flash MX.
|
|
Si! lo que estas pensando.. un solo formulario para todo!!! | |
A. Daniel Pereyra |
Viento - 04/09/2009 18:07:39
Hola pereyrada, En un proyecto web, con flash CS4 y as2, empleé el duplicateMovieClip tal y como lo explicas en este tutorial para campos de introducción de texto. Es decir, que he realizado casi lo mismo. (el casi es por tener más elementos y clips, pero en lo que se refiere a los campos de introduccion de texto, es igual). Bueno, mi problema ahora es como eliminar esos campos de textos. No ponerlos a "cero" ( .text="";), sino borrarlos del mapa definitivamente. he probado con .removeMovieClip y nada, .removeTextField y nada,... que si el eval () que si _root[] nada de nada. Podrias indicarme como eliminar esas introducciones de texto? Muchas gracias.
pereyrada - 04/09/2009 18:57:45
Bien, veamos. En primer lugar debo comentar que el codigo no esta optimizado, en mi apuro veo que cometí un error, el cual no significa que sea el motivo por el cual no puedas usar removeMovieClip... veamos como quedaria con una optimización del codigo:
Salto=20;
yInicial=iInput._x;
for(n=1;n<5;n++){
Nombre="campo"+n;
trace(Nombre);
duplicateMovieClip('iInput',Nombre,n);
eval(Nombre)._y=yInicial;
eval.tabIndex=n;
yInicial=yInicial+30;
}
Ahora yInicial depende del Input que ponemos como objeto inicial y el "Nombre" ahora es campo1, campo2, campo3, etc.. y no campo1, campo12, campo123 como quedaba antes
Ahora pasemos al borrado
Tenemos dos alternativas...
1. poner "campo1._visible=false";
Esto hace que el campo no este mas a disposición del usuario pero podemos ponerlo nuevamente en pantalla tan solo poniendo _visible=true.
Esto seria interesante en el caso de que los campos dependan de un checkbox que defina que campos debe llenar o no.
2. poner removeMovieClip("campo1") hace que el campo desaparesca.
Como ves no pongo campo1.removeMovieClip().
Por otro lado si la idea es hacerlo dinámicamente puedo poner
removeMoveClip(eval(Nombre)) y en Nombre pongo el nombre del campo que quiero borrar definitivamente.
Recorda que con _visible lo puedo utilizar sin la necesidad de crear nuevamente un campo.
Saludos
A. Daniel Pereyra
Viento - 05/09/2009 20:58:09
Hola pereyrada,
Muchas gracias por tu pronta respuesta. Lo de ponerlo invisible si lo tenía claro, pero el tema era eliminarlo del escenario ya que ese campo ya no se iba a usar mas.
Todo es creado dinámicamente, a petición de cliente, por un boton. Y necesitaba borrar los campos (por otro boton) en el caso de que el cliente lo pida.
Como bien dices, al estilo "formulario dinámico", y la verdad es que tu respuesta me ayudó mucho.
Al final lo he conseguido de esta manera:
removeMovieClip(_root ["nombre" + i]);
Con la opción del eval() no me lo borra, pero con el _root [] si.
Muchas gracias de nuevo.