Comunidad de diseño web y desarrollo en internet online

pregunta sobre duplicar objetos

Citar            
MensajeEscrito el 12 Feb 2010 03:00 am
Hola, quiero duplicar una instancia de la clase Sprite y no me sale :(

Es te es mi codigo

Código ActionScript :

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;
}

var circulo:Sprite=new Sprite();
circulo.graphics.beginFill(0x00FF00);
circulo.graphics.drawCircle(200,200,20);
addChild(circulo);

var replica:DisplayObject=duplicateMovieClip(circulo);
replica.x=0;
replica.y=0;


El codigo funciona bien con objetos de la librería pero no con el objeto círculo que muestro en el código.

Que cambio debo hacer???


Gracias, hasta luego

Por diego1311

61 de clabLevel



 

Lima - Perú

msie8
Citar            
MensajeEscrito el 12 Feb 2010 04:21 pm
Lo que pasa con objetos en la libreria esque los tienes que linkear a una clase y replica esa clase pero en el caso de tu circulo que estas haciendo es crear como tal un nuevo Sprite eso es muy diferente a copiar los graficos por userte existe un metodo en la clase Grpachics para copiar los graficos


Simplemente agrego una linea a tu codigo

Código ActionScript :

function duplicateMovieClip(target:DisplayObject):DisplayObject 
{ 
   var targetClass:Class; 
   targetClass = Object(target).constructor; 
   var duplicado:DisplayObject = new targetClass(); 

   targetClass(duplicado).graphics.copyFrom(targetClass(target).graphics);
   
   duplicado.transform = target.transform; 
   duplicado.filters = target.filters; 
   duplicado.cacheAsBitmap = target.cacheAsBitmap; 
   duplicado.opaqueBackground = target.opaqueBackground; 
 
   target.parent.addChild(duplicado); 
   return duplicado; 
} 
 
var circulo:Sprite=new Sprite(); 
circulo.graphics.beginFill(0x00FF00); 
circulo.graphics.drawCircle(200,200,20); 
addChild(circulo); 
 
var replica:DisplayObject=duplicateMovieClip(circulo); 
replica.x=0; 
replica.y=0; 


Ten cuidado porq agregas circulo sin modificarle sus coordenadas de modo que esta en la coordenada 0,0 al igual que replica entonces al agregarlos a escena ambos circulos se van solapar y parecera ser uno solo

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Feb 2010 05:17 pm
Gracias, me faltava esa línea. Hasta luego

Por diego1311

61 de clabLevel



 

Lima - Perú

msie8
Citar            
MensajeEscrito el 12 Feb 2010 05:45 pm
Algo más, esa línea me sirvió para duplicar el circulo pero este solo lo puse de ejemplo.

El verdader objeto Sprite que quiewro duplicar contiene un texto con fuente enbebida y admás este texto es máscara de un fondo que cargo desde un archivo exterior. Y la linea que agregaste al código no es suficiente para el objeto que te acabo de describir, tienes alguna idea????

En el tutorial de donde saqué el código explican que a la función duplicateMovieClip se le pasa como parámetro una clase, quizas tenga que convertir mi Objeto Sprite en una clase o algo así.

Espero que me puedas ayudar, gracias

Por diego1311

61 de clabLevel



 

Lima - Perú

msie8
Citar            
MensajeEscrito el 12 Feb 2010 05:45 pm
Pd: el tutorial es este

http://www.cristalab.com/tips/como-duplicar-un-movieclip-en-actionscript-3-c47686l/

Por diego1311

61 de clabLevel



 

Lima - Perú

msie8
Citar            
MensajeEscrito el 12 Feb 2010 06:02 pm
Tienes que hacer un ciclo...duplicas el sprite duplicas su contenido (graphics y transform) y aparte tendrias que hacer un ciclo que duplciara cada hijo y lo agregara a tu nuevo sprite.

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Feb 2010 06:36 pm
mmmmm ya veo, lo intentare perfeccionaré mi clase con getChild. Gracias

Por diego1311

61 de clabLevel



 

Lima - Perú

msie8

 

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