Cómo duplicar un MovieClip en ActionScript 3
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:
- package com.zguillez.utils
- {
- 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:
- import com.zguillez.utils;
- 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.
Tambien podríamos haver escrio esta clase de una forma no estática:
- package com.zguillez.display
- {
- import flash.display.DisplayObject;
- import flash.display.MovieClip;
- //-----------------------------
- public class Duplicado extends MovieClip
- {
- private var _duplicado:DisplayObject;
- //-----------------------------
- public function Duplicado(target: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;
- addChild(_duplicado);
- }
- //-----------------------------
- }
- }
Compártelo:
Visto 13.660 veces
[…] En el post anterior escribà otra clase para duplicar un MovieClip, en el que se veÃa que habÃa que para duplicar el clip lo que hay que hacer es crear otra instancia de la misma clase y aplicarle todas las propiedades del clip original al clip duplicado. […]
Sr Zguillez, tengo un problema con el codigo, creo que hice bien las cosas y me manda un error que dice 1067: Conversión implícita de un valor de tipo Class a un tipo flash.display:DisplayObject no relacionado. Este error me aparece en esta linea var clip2:DisplayObject = Tools.duplicateMovieClip(clip);
@Cavs: y “clip” es un objeto de clase que extiende de MovieClip o de Sprite? el error te dice que estas intentando convertir Class a un DisplayObject…
Si “clip” es un objeto de la libreria asegurate de que le diste un nombre de clase en “Linkage” y que la Base class es “flash.display.MovieClip”;