Duplicando Objecto (duplicateMovieClip)

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

Compártelo

También te puede interesar...

Comentarios

  • No_avatar_thumb

    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.

  • Avatar_132_thumb

    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

     

  • No_avatar_thumb

    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.

Escribe un comentario

Tienes que estar registrado para poder dejar comentarios.
Accede a tu cuenta o regístrate en NotasWeb.com.
Avatar_132 pereyrada
16º en el Ranking


Artículos más vistos del usuario

Últimos artículos del usuario