Comunidad de diseño web y desarrollo en internet online

Duplicar MovieClip y Su Contenido! (?)

Citar            
MensajeEscrito el 31 Dic 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)

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 01 Ene 2008 02:27 am

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

firefox
Citar            
MensajeEscrito el 01 Ene 2008 03: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.

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 01 Ene 2008 03:27 pm
Tampoco Funciona.... :(

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 01 Ene 2008 03: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.

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 01 Ene 2008 06: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);
}

Por DiegoAzul

376 de clabLevel



 

Mx

firefox
Citar            
MensajeEscrito el 01 Ene 2008 08: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!

Por llops

294 de clabLevel

1 tutorial

 

Barcelona

firefox
Citar            
MensajeEscrito el 01 Ene 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. :wink:

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 02 Ene 2008 02: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. :)

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 02 Ene 2008 10:01 am

JaLeRu escribió:

Si tienes algo con que aportar gracias

Venga, una aportación :)

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 :roll: )

Ya nos cuentas a ver si te sirve.
Suerte con el paint!

Por llops

294 de clabLevel

1 tutorial

 

Barcelona

firefox
Citar            
MensajeEscrito el 02 Ene 2008 05: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);
}
}

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 02 Ene 2008 08:59 pm
Solucione mi problema, solamente tenia que poner la función CerraV fuera de la funcion CreaPre.
:P

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

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 03 Ene 2008 01: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...

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 03 Ene 2008 09:02 am
Ey Zguillez, está muy bien el tip! (y)

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!

Por llops

294 de clabLevel

1 tutorial

 

Barcelona

firefox

 

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