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)
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.
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);
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 )
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]
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"....
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...
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]