Comunidad de diseño web y desarrollo en internet online

duplicar MovieClip

Citar            
MensajeEscrito el 16 Oct 2008 11:32 pm
Hola foro, ya se que este tema se ha tratado muchas veces, pero en mi caso en particular no logo encontrar una solución, a ver si me echais una mano.

Necesito duplicar un MC, del que solo sé el nombre, con:

Código :

 var newtile = getChildByName(nombre);


He probado con el método que encontre en esta página: [url=http://www.cristalab.com/tips/47686/como-duplicar-un-movieclip-en-actionscript-3.html], asi:

Código :

var clip2:DisplayObject = duplicateMovieClip(newtile);


pero esto me devuelve un DisplayObject, no un MovieClip, por lo que después, por ejemplo, no puedo redimensionarlo asi:

Código :

clip2.scaleX=0.5;


¿Alguna idea?, sorry, por ahora estoy intentando aprender AS3, por lo que no estoy todavia muy puesto...
GRACIAS

Por rau1sfx

26 de clabLevel



 

aqui

firefox
Citar            
MensajeEscrito el 17 Oct 2008 03:15 am
DisplayObject es la superclase de MovieClip y soporta las propiedades scaleX y scaleY, asi que si no funciona tiene que ser por otro motivo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 17 Oct 2008 04:11 am
mmm duplicateMovieClip no existe,. es una clase que estas usando??

simplemente para duplicar un clip tenes que hacer un addChild del mismo clip y ya.

Código :

var newclip:MovieClip= MovieClip(getChildByName("nombre"));
addChild(newClip);


eso debería de funcionar. :)

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

firefox
Citar            
MensajeEscrito el 17 Oct 2008 08:18 am
Gracias por vuestras respuestas.

phoxer: con el codigo que has escrito NO duplicas el clip, simplemente lo cambias de sitio.
El metodo duplicateMovieClip() esta en el enlace que puse en el primer post.



Saludos!

Por rau1sfx

26 de clabLevel



 

aqui

firefox
Citar            
MensajeEscrito el 17 Oct 2008 08:38 am
Normalmente, en lugar de duplicar un MovieClip, lo que se hace es crear una nueva instancia de la Clase. Así, si tu anterior MovieClip era un Objeto de la clase "MiMovieClip" simplemente puedes hacer un

Código :

newClip:MiMovieClip=new MiMovieClip()
addChild(newClip)

el "método duplicateMovieClip" trata de resolver el problema de si queremos que, cuando creamos "newClip", coga también las propiedades y transformaciones aplicadas al MC Original. Sí algo parecido a cuando en AS2 escribíamos

Código :

//AS.2
//el "tercer argumento"
original.duplicateMovieClip("copia",1,original)
}

Vale, el método precisa un DisplayObject y devuelve un DisplayObject. Como MovieClip deriva de la clase DisplayObject, NO SÉ SI SE PUEDE hacer una "conversión de cast" y escribir

Código :

var clip2:MovieClip= MovieClip(duplicateMovieClip(DisplayObject(newtile)));

Observa que hay dos conversiones de cast, una cuando le pasamos el argumento y otra cuando lo igualamos a la variable
Si no se puede, sí nos podemos crear unafunción duplicateMovieClip que reciba un MovieClip y devuelva un MovieClip. Vamos, que tendríamos dos funciones duplicateDisplayObject y duplicateMovieClip exactamente iguales salvo en el tipo de variable del argumento y el tipo que devuelve

¡OJO! no hay que confundir una "conversión de cast" con un método de crear un nuevo Objeto.

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Oct 2008 04:06 pm
Hola

Bien, no esta mal esa funcion de duplicate movieclip, pero es bastante basica y para objetos complejos no te va a servir, ya que internamente lo que hace es crearte una nueva instancia de una clase y trasladarle las propiedades basicas, como filtros, cache de bitmap y demas... y ademas te la agrega de forma automatica en el padre del objeto q queres duplicar, lo q no siemre se necesita... incluso q pasaria si ese objeto aun no esta en el display list... tiraria una excepcion q no es capturada...

A mi parecer lo mejor es implementar una funcion clone() dentro del objeto de esta manera

Código :

interface IClonable
{
     function clone():*;
}

class Pepe implements IClonable
{
     public function clone():* {}
}


Donde dentro de la funcion clone crees un nuevo objeto con todo lo q se necesita, por ej si al objeto Pepe tiene referencia a otros objetos, o durante su tiempo de vida recolecto referecias, imagenes, etc... se las deberia pasar al objeto clonado... por lo q en esta funcion crearia un nuevo objeto Pepe y le pasaria todo lo q tenga (porq puede pasar q si clonas el objeto en diferentes tipos de vida, este tenga diferentes datos para pasarle al clonado.

Por lo tanto la funcion de duplicate movieclip seria la sigueinte

Código :

/**
* Duplica un objeto 
* 
* @param target   Referencia al objeto a clonar
* @param parent  
public static function duplicateObject(target:ICloneable):*
      {
         if ( target == null)
            returm null;
         
         var clone:Object = target.clone() as Object;
         
         if ( target is DisplayObjectCotainer ) // si estoy duplicando un objeto visual
         {
             clone.transform = Object(target)..transform;
             clone.filters = Object(target)..filters;
             clone.cacheAsBitmap = Object(target)..cacheAsBitmap;
             clone.opaqueBackground = Object(target)..opaqueBackground;
         }
         
         return clone;
      }

var sp:MiSprite = new MiSprite(); //clase q implementa IClonable
this.addChild(duplicateObject(sp));



Bueno, yo creo q esa es una buena solucion mucho mas ordenada y extensible... claro esta q no probe el codigo jaja (perdon) asi q puede tener algun q otro error

Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 23 May 2009 02:45 pm
Hola ahi vengo con mi cuchara acerca de castear objetos, yo eh visto que por ejemplo cuando recibes el objeto del MOUSEEVENT y en la funcion quieres castear ese objeto usas el "as" y asi lo conviertes por ejemplo

var myClip:MovieClip = e.currentTarget as MovieClip

si mal no recuerdo asi es el asunto... de las casteadas aqui en AS3

Por ldgmmorales

Claber

142 de clabLevel

1 tutorial

Genero:Masculino  

firefox

 

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