Cristalab

Duplicar MovieClip y Su Contenido! (?)

   Foros de discusión -> Flex, Actionscript 3 y AIR (Apollo)
Mensaje Autor
Mensaje Publicado: Lun Dic 31, 2007 11:56 pm     Citar   firefox 
Hola, de seguro algunos leeran el titulo y diran "Este JaLeRu no usa el buscador"
Pues si lo ocupo, y vi los Tips para duplicar Movieclip en As3.
Pero tengo un pequeño problema. Cuando intento duplicar un Sprite que anteriormente se le habia dibujado algo dentro con "graphics", su contenido dibujado no se copia.
Ejemplo:

Código :

var Dibujo:Sprite=new Sprite();
addChild(Dibujo);
Dibujo.graphics.lineStyle(2,0);
Dibujo.graphics.drawCircle(100,100,50);
//Creamos un Sprite con un Circulo dibujado dentro
function Duplica(){
var Dibujo:Class=Object(Dibujo).constructor;
var Imagen:Sprite=new Dibujo();
addChild(Imagen);
}
Duplica();
//Duplico "Dibujo" como "Imagen


Si provamos esto, veremos que no Copia lo que esta dentro.
Ojala puedan ayudarme. Gracias y Feliz Año nuevo! (Ya Falta poco)
 _________________

Visita mi blog: www.jestudio.cl/blog

JaLeRu


clabLevel: 1231 Genero:Masculino
Santiago de Chile

6 Tips

MP Email Web       MSN Messenger  
Volver arriba
Mensaje Publicado: Mar Ene 01, 2008 2:27 am     Citar   firefox 
mira JaLeRu:
este es de Zguillez, como siempre muy bueno:
http://www.cristalab.com/tips/47686/como-duplicar-un-movieclip-en-actionscript-3
 _________________
So, What's Your Price?

master_of_puppetz


clabLevel: 808 Genero:Masculino
México D.F.

2 Tips

MP     Google Talk  MSN Messenger  
Volver arriba
Mensaje Publicado: Mar Ene 01, 2008 3:07 pm     Citar   firefox 
M.... puede que no haya tomado en cuenta la segunda parte del codigo.
Voy a probar eso de:

Código :

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

Gracias.
 _________________

Visita mi blog: www.jestudio.cl/blog

JaLeRu


clabLevel: 1231 Genero:Masculino
Santiago de Chile

6 Tips

MP Email Web       MSN Messenger  
Volver arriba
Mensaje Publicado: Mar Ene 01, 2008 3:27 pm     Citar   firefox 
Tampoco Funciona.... Triste
 _________________

Visita mi blog: www.jestudio.cl/blog

JaLeRu


clabLevel: 1231 Genero:Masculino
Santiago de Chile

6 Tips

MP Email Web       MSN Messenger  
Volver arriba
Mensaje Publicado: Mar Ene 01, 2008 3:50 pm     Citar   firefox 
Les explico mi proyecto.
Estaba haciendo un paint en Flash y As3 y quería una función que diera una vista preliminar pequeña en una esquina (para eso necesito duplicar la imagen y luego disminuir su tamaño)
también quería hacer un CTRL+Z para deshacer algo mal hecho. Para esto se me ocurrió crear un array con las 10 Copias anteriores de cada acción. De manera que si uno preciona CTRL+Z cambie la imagen actual por la anterior. (Obviamente no tendremos un CTRL+Z infinito).
Pues para eso necesito saber como Duplicar el MC y su Contenido.
Ojala me puedan ayudar... o da otra idea.
 _________________

Visita mi blog: www.jestudio.cl/blog

JaLeRu


clabLevel: 1231 Genero:Masculino
Santiago de Chile

6 Tips

MP Email Web       MSN Messenger  
Volver arriba
Mensaje Publicado: Mar Ene 01, 2008 6:39 pm     Citar   firefox 
para duplicar un Sprite puedes hacerlo asi:


Código :

//-------------Duplicar
for (var i:uint=0; i<10; i++) {
   var texto_txt:TextField=new TextField();
   var Dibujo:Sprite=new Sprite();

   addChild(Dibujo);
   Dibujo.addChild(texto_txt)
   texto_txt.x=Dibujo.width
   texto_txt.y=Dibujo.height
   texto_txt.text="clip numero"+i
   
   Dibujo.y=i*100;
   Dibujo.graphics.lineStyle(2,0);
   Dibujo.graphics.drawCircle(100,100,50);
}

DiegoAzul


clabLevel: 231



MP         
Volver arriba
Mensaje Publicado: Mar Ene 01, 2008 8:45 pm     Citar   firefox 

JaLeRu escribió:

quería una función que diera una vista preliminar pequeña en una esquina (para eso necesito duplicar la imagen y luego disminuir su tamaño)


Yo lo que haría para esto sería utilizar el método draw de la clase bitmapData (luego podrías cambiar su tamaño con un objeto Transform).

Saludos!
 _________________
http://llops.com/blog
[experimentos y artículos entorno a la plataforma flash y as3]

llops


clabLevel: 258 Genero:Masculino
Barcelona

1 Tips

MP Web         
Volver arriba
Mensaje Publicado: Mar Ene 01, 2008 10:02 pm     Citar   firefox 

llops escribió:

JaLeRu escribió:

quería una función que diera una vista preliminar pequeña en una esquina (para eso necesito duplicar la imagen y luego disminuir su tamaño)


Yo lo que haría para esto sería utilizar el método draw de la clase bitmapData (luego podrías cambiar su tamaño con un objeto Transform).

Saludos!

Leeré sobre eso gracias.
Si tienes algo con que aportar gracias. Guiño
 _________________

Visita mi blog: www.jestudio.cl/blog

JaLeRu


clabLevel: 1231 Genero:Masculino
Santiago de Chile

6 Tips

MP Email Web       MSN Messenger  
Volver arriba
Mensaje Publicado: Mie Ene 02, 2008 2:33 am     Citar   firefox 

llops escribió:


Yo lo que haría para esto sería utilizar el método draw de la clase bitmapData (luego podrías cambiar su tamaño con un objeto Transform).
Saludos!


Perfecto!!! Muchísimas Gracias. Sonrisa
 _________________

Visita mi blog: www.jestudio.cl/blog

JaLeRu


clabLevel: 1231 Genero:Masculino
Santiago de Chile

6 Tips

MP Email Web       MSN Messenger  
Volver arriba
Mensaje Publicado: Mie Ene 02, 2008 10:01 am     Citar   firefox 

JaLeRu escribió:

Si tienes algo con que aportar gracias

Venga, una aportación Sonrisa

Abre una película nueva, de 400x300 píxeles y fondo oscuro. En el documentClass le pones Main.
La clase Main es la siguiente:

Código :


package {
   import flash.display.*;
   import flash.events.*;
   import flash.geom.Matrix;

   public class Main extends MovieClip {
      
      private var _canvas:Sprite;         // Canvas donde dibujar
      private var _boton:Sprite;         // Boton para sacar pantallazos
      private var _bmpData:BitmapData;   // Para hacer el preview
      private var _bmp:Bitmap;
      
      function Main()
      {
         // Canvas
         _canvas  = new Sprite();
         _canvas.graphics.beginFill(0xFFFFFF);
         _canvas.graphics.drawRect(10, 10, 300, 200);
         _canvas.graphics.endFill();
         addChild(_canvas);
         
         // Boton
         _boton = new Sprite();
         _boton.graphics.beginFill(0xFFFFFF);
         _boton.graphics.drawRect(10, 250, 30, 20);
         _boton.graphics.endFill();
         addChild(_boton);
         
         // Bitmap
         _bmpData = new BitmapData(75, 50, false, 0xFFFFFF);
         _bmp = new Bitmap(_bmpData);
         _bmp.x = 320;
         _bmp.y = 10;
         addChild(_bmp);
         
         // Listeners
         _canvas.addEventListener(MouseEvent.CLICK, dibujar);
         _boton.addEventListener(MouseEvent.CLICK, pantallazo);
      }
      
      private function dibujar(e:MouseEvent):void
      {
         // Dibuja bolas rojas
         var posX:Number = this.mouseX;
         var posY:Number = this.mouseY;
         var obj:Shape = new Shape();   
         obj.graphics.beginFill(0xFF0000);
         obj.graphics.drawCircle(posX, posY, 10);
         obj.graphics.endFill();
         _canvas.addChild(obj);
      }
      
      public function pantallazo(e:MouseEvent):void
      {
         // Una matriz que escalará el contenido a 1/4
         var matriz:Matrix = new Matrix();
         matriz.scale(.25, .25);
         
         // Dibujar el contenido del canvas en el bitmapData
         _bmpData.draw(_canvas, matriz);
      }
   }
}


Esta clase contiene un canvas donde dibujar bolas rojas. Luego puedes utilizar un boton para sacar pantallazos de lo dibujado:

Si quieres trastear un poco lo he colgado aquí (no he sido capaz de insertar el swf mmmm )

Ya nos cuentas a ver si te sirve.
Suerte con el paint!
 _________________
http://llops.com/blog
[experimentos y artículos entorno a la plataforma flash y as3]

llops


clabLevel: 258 Genero:Masculino
Barcelona

1 Tips

MP Web         
Volver arriba
Mensaje Publicado: Mie Ene 02, 2008 5:43 pm     Citar   firefox 
Muy util si ya me funciono.
Ahora mi problema es el siguiente.
Tengo una función que crea la vista preliminar del dibujo que hago.
(Anteriormente ya se a creado la varibale Data, Copia y Tabla)
Mi problema es que cuando creo una vista preliminar, y borro la vista, la creo de nuevo.
Me da un error.
así como si se estuvieran creando muchos "Datas y Copias"....

Código :

function crearPre(e:MouseEvent){
Data=new BitmapData(Punto.x,Punto.y);
Data.draw(Dibujo);
Copia= new Bitmap(Data);
Tabla.graphics.clear();
Copia.width=200;
Copia.height=(Sector.height*((100*200)/Sector.width))/100;
Tabla.graphics.lineStyle(5,0);
Tabla.graphics.beginFill(0xD0D0D0);
Tabla.graphics.drawRect(0,0,Copia.width+10,Copia.height+10);
addChild(Tabla);
Tabla.addChild(Copia);
Tabla.x=stage.stageWidth/2-(Tabla.width/2);
Tabla.y=stage.stageHeight/2-(Tabla.height/2);
Tabla.addChild(Close);
Copia.y+=5;
Copia.x+=5;
Close.x=Tabla.width-Close.width-5;
Close.addEventListener(MouseEvent.CLICK, CerrarV);
function CerrarV (e:MouseEvent):void{
Tabla.removeChild(Copia);
Tabla.removeChild(Close);
removeChild(Tabla);
}
}
 _________________

Visita mi blog: www.jestudio.cl/blog

JaLeRu


clabLevel: 1231 Genero:Masculino
Santiago de Chile

6 Tips

MP Email Web       MSN Messenger  
Volver arriba
Mensaje Publicado: Mie Ene 02, 2008 8:59 pm     Citar   firefox 
Solucione mi problema, solamente tenia que poner la función CerraV fuera de la funcion CreaPre.
Lengua

Gracias llops por tu ayuda.
(Gracias tambien a DiegoAzul y a master_of_puppetz por la intención. )
 _________________

Visita mi blog: www.jestudio.cl/blog

JaLeRu


clabLevel: 1231 Genero:Masculino
Santiago de Chile

6 Tips

MP Email Web       MSN Messenger  
Volver arriba
Mensaje Publicado: Jue Ene 03, 2008 1:24 am     Citar   firefox 
Duplicar MovieClip a través de BitmapData es correcto pero a veces puede no resultar útil ya que el duplicado es un bitmap y deja de ser vectorial...
Encontré un sistema para hacer este tipo de duplicados, lo posteo como tip ya que es un proceso un poco complejo...
 _________________

MY : Blog | Facebook | Twitter | Pownce | Jaiku | Plurk | Last.fm | Flickr.

Zguillez
BOFH

Bastard Operators From Hell Héroes Premio_Secretos
clabLevel: 4113
BCN
3 Tutoriales
40 Tips
1 Ejemplos

MP Email Web     Google Talk  MSN Messenger  
Volver arriba
Mensaje Publicado: Jue Ene 03, 2008 9:02 am     Citar   firefox 
Ey Zguillez, está muy bien el tip! Thumbs up

Para que quede constancia, el método draw del BitmapData está puesto aquí para sacar previews, ya que es más útil que los vectores porque no consume recursos, pero como dice Zguillez, no es funcional. Así que si se quiere trastear con lo que ya esté dibujado no se debe utilizar.

Por otro lado, y al margen del preview, si ya no es necesario utilizar lo que está pintado (por ejemplo, porque hay un número limitado de Ctrl+Z), sí que es muy aconsejable pasar todo el dibujo a Bitmap, ya que no penaliza el rendimiento.

Saludos!
 _________________
http://llops.com/blog
[experimentos y artículos entorno a la plataforma flash y as3]

llops


clabLevel: 258 Genero:Masculino
Barcelona

1 Tips

MP Web         
Volver arriba
Responder al tema    Foros de discusión -> Flex, Actionscript 3 y AIR (Apollo) Todas las horas son GMT
Página 1 de 1

Respuesta Rapida

  Citar el ultimo mensaje
Adjuntar tu firma

Mostrar mensajes de anteriores:
  

 


Cristalab BloodBerry Style © 2006 Cristalab
Powered by phpBB © 2001, 2002 phpBB Group