Cristalab

Duplicar MovieClip y Su Contenido! (?)

Citar            
MensajePublicado: Lun Dic 31, 2007 11:56 pm

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)

JaLeRu


clabLevel: 1293
Santiago de Chile


6 Tips

firefox
  MSN Messenger     MP   Email   Web
Citar            
MensajePublicado: Mar Ene 01, 2008 2:27 am

mira JaLeRu:
este es de Zguillez, como siempre muy bueno:
http://www.cristalab.com/tips/47686/como-duplicar-un-movieclip-en-actionscript-3

master_of_puppetz


clabLevel: 893
México D.F.


2 Tips

firefox
Google Talk   MSN Messenger     MP     Web
Citar            
MensajePublicado: Mar Ene 01, 2008 3:07 pm

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.

JaLeRu


clabLevel: 1293
Santiago de Chile


6 Tips

firefox
  MSN Messenger     MP   Email   Web
Citar            
MensajePublicado: Mar Ene 01, 2008 3:27 pm

Tampoco Funciona.... Triste

JaLeRu


clabLevel: 1293
Santiago de Chile


6 Tips

firefox
  MSN Messenger     MP   Email   Web
Citar            
MensajePublicado: Mar Ene 01, 2008 3:50 pm

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.

JaLeRu


clabLevel: 1293
Santiago de Chile


6 Tips

firefox
  MSN Messenger     MP   Email   Web
Citar            
MensajePublicado: Mar Ene 01, 2008 6:39 pm

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: 284



firefox
      MP    
Citar            
MensajePublicado: Mar Ene 01, 2008 8:45 pm

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!

llops


clabLevel: 263 Genero:Masculino
Barcelona


1 Tip

firefox
      MP     Web
Citar            
MensajePublicado: Mar Ene 01, 2008 10:02 pm

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

JaLeRu


clabLevel: 1293
Santiago de Chile


6 Tips

firefox
  MSN Messenger     MP   Email   Web
Citar            
MensajePublicado: Mie Ene 02, 2008 2:33 am

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

JaLeRu


clabLevel: 1293
Santiago de Chile


6 Tips

firefox
  MSN Messenger     MP   Email   Web
Citar            
MensajePublicado: Mie Ene 02, 2008 10:01 am

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!

llops


clabLevel: 263 Genero:Masculino
Barcelona


1 Tip

firefox
      MP     Web
Citar            
MensajePublicado: Mie Ene 02, 2008 5:43 pm

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

JaLeRu


clabLevel: 1293
Santiago de Chile


6 Tips

firefox
  MSN Messenger     MP   Email   Web
Citar            
MensajePublicado: Mie Ene 02, 2008 8:59 pm

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. )

JaLeRu


clabLevel: 1293
Santiago de Chile


6 Tips

firefox
  MSN Messenger     MP   Email   Web
Citar            
MensajePublicado: Jue Ene 03, 2008 1:24 am

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...

Zguillez
BOFH

Bastard Operators From Hell Héroes Premio_Secretos
clabLevel: 4295
BCN

3 Tutoriales
43 Tips
1 Ejemplo

firefox
Google Talk   MSN Messenger     MP   Email   Web
Citar            
MensajePublicado: Jue Ene 03, 2008 9:02 am

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!

llops


clabLevel: 263 Genero:Masculino
Barcelona


1 Tip

firefox
      MP     Web

   Página 1 de 1

Responder al tema
Respuesta Rapida


 

 

Cristalab BabyBlue + BloodBerry © 2007 Cristalab
Powered by phpBB © 2001, 2007 phpBB Group