Cristalab

Cómo duplicar un MovieClip en ActionScript 3

Por: Zguillez + 26.10.2007

En ActionScript 3 ya no existe el método duplicateMovieClip, pero eso no quiere decir que no podamos duplicar un MovieClip situado en nuestra película.

Con esta pequeña clase podemos conseguir ese duplicado:

Código :

package com.zguillez.as3
{
   import flash.display.DisplayObject;
   public class Tools
   {
      public static function duplicateMovieClip(target:DisplayObject):DisplayObject
      {
         var targetClass:Class;
         targetClass = Object(target).constructor;
         var duplicado:DisplayObject = new targetClass();

         duplicado.transform = target.transform;
         duplicado.filters = target.filters;
         duplicado.cacheAsBitmap = target.cacheAsBitmap;
         duplicado.opaqueBackground = target.opaqueBackground;

         target.parent.addChild(duplicado);
         return duplicado;
      }
   }
}


Su uso sería este:

Código :

import com.zguillez.as3.Tools;
var clip2:DisplayObject = Tools.duplicateMovieClip(clip);
clip2.x = 200;
clip2.y = 100;


Lo que estamos haciendo es hacer una copia de la clase pasada como parámetro (targetClass) en duplicado:DisplayObject, y a esa nueva clase le añadimos los mismo filtros y transformaciones que la clase original.

Nota: Para poder crear el duplicado de un MovieClip situado en la librería es necesario que el MovieClip tenga la opción "Exportar para ActionScript" activada y con un nombre de clase.

Etiquetas actionscript_3

Comentarios | Enviar un comentario
ah!... gracias! Thumbs up

Y pues para adelante... hay más control que en AS 2.0.
Por: glsmaster_blog
Gracias Zguillez por la ayuda , buena aclaración también en tu nota Guiño.
Por: Rafeo
Zguillez, yo ya había mencionado (2 veces) como duplicar un MovieClip en mis Tips de Imagen con efecto de reflejo y movimiento en Actionscript 3 y en el de Cómo hacer un efecto de reflejo en Actionscript 3.
Por: Carloz.Yanez

Carloz.Yanez :

Zguillez, yo ya había mencionado (2 veces) como duplicar un MovieClip en mis Tips

Este tip es para gente que busque esa función en concreto, y que dificilmente la encontraran siendo parte de otros tip que tienen otras finalidades... De hecho lo escribí por que me han preguntado varias veces y varias personas diferentes por este tema (y todas posteriores a la publicación de tus tips...)
Por: Zguillez
queeeeee porqueria dios mio tantas lineas para lo q antes hacias en una no entiendo x q nos complicaron tanto gracias Adobe se les aprecia
Por: hellrider_blog

hellrider_blog :

queeeeee porqueria dios mio tantas lineas para lo q antes hacias en una no entiendo x q nos complicaron tanto gracias Adobe se les aprecia

Así habla un desarrollador consumado ¿Cuándo sea grande puedo ser como tú? mmmm
Por: The Fricky!
"queeeeee porqueria dios mio tantas lineas para lo q antes hacias en una no entiendo x q nos complicaron tanto gracias Adobe se les aprecia"

yo tampoco se como diseñadores graficos o fanaticos se creen programadores...
Por: Diegoazul_blog
Me tomé una atribución (perdón zguillez) de hacerle un update a la versión original para que también tome un nombre el MC duplicado y que tome un Depth... para que tenga la misma funcionalidad de la clase de AS2...

Código :

package com.zguillez.as3
{
   import flash.display.DisplayObject;
   public class MovieClipTools
   {
      public static function duplicateMovieClip( target:DisplayObject, newName:String = "", depth:int = -1 ):DisplayObject
      {
      var targetClass:Class      = Object( target ).constructor;            
      var duplicado:DisplayObject = new targetClass();
      
      //asiganomos el nuevo nombre si fue pasado por parametro
      if(Boolean(newName))
      {
         duplicado.name = newName;
      }
      
      //copiamos todas las propiedades y filtros del original
      duplicado.transform       = target.transform;
      duplicado.filters          = target.filters;
      duplicado.cacheAsBitmap    = target.cacheAsBitmap;
      duplicado.opaqueBackground    = target.opaqueBackground;
      
      // agregamos a la lista de objetos en visualización
      target.parent.addChild( duplicado );
      
      //asignamos el nuevo depth si es que esta dentro del rango válido
      if( (depth < target.parent.numChildren)

Por: eguy_blog
Si bien es más complicado, también se puede decir que es más interesante esto del nuevo actionscript 3, pero bueno, se sabe que flash fue creado para diseñadores web, y no para personas enfocadas por completo a la programación en sí, y esto de actionscript sí que se está volviendo por completo una tarea para personas especializadas en la programación, con esto más bien pareciera que se esta creando un nuevo ambiente en flash para que diseñadores y programadores trabajen de la mano, porque vaya que es complicado el nuevo lenguaje. Sé que muchos programadores experimentados de aquí dirán que no es complicado, pero tomen en cuenta que no todos tenemos los conocimientos previos que ustedes tienen, solo es cuestión de paciencia, supongo, pero de verdad que actionscript va en evolución y así como da un poco de frustración también da mucho gusto que se vea esa evolución y que de paso nos den nuevas cosas con que entretenernos.
Por: Señor Oz_blog
(con todo respeto a muchos programadores), eso de que es una porqueria tener que hacer todas esas lineas para lo que antes se hacia con una... realmente es una porqueria, ya que el trabajo del programador se hace mas grande al querer hacer algo que antes ya existia (el hilo negro), no estoy encontra de la nueva estandarizacion de AS3 pero si les falto crear mas clases o codigo para evitar reescribir codigo... y migrar proyectos de AS2 a AS3 realmente resulto complicado, quedo un codigo mas limpio pero hizo la necesidad de reescribir codigo que ya antes existia, es mas facil comenzar un proyecto de 0 que migrar =(, sin contar que sera necesario "programar" las animaciones, y lo que me gustaba era que podia pasar 60% del tiempo diseñando y animando y 40% programando ahora paso 60% diseñando y 70% programando su animacion =)... bueno no todo es malo, si se hace una aplicacion de tipo formularios, uno si que termina mucho mas rapido =D (aprox 50% mas rapido), la verdad esta mejora solo es para programadores y NO para diseñadores, lastima por los que tenemos que hacerla de ambos... pues en tiempo quedamos igual =(
Por: Carlos_blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.