|
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 "ImagenSi provamos esto, veremos que no Copia lo que esta dentro. Ojala puedan ayudarme. Gracias y Feliz Año nuevo! (Ya Falta poco) |
|
|
mira JaLeRu: este es de Zguillez, como siempre muy bueno: http://www.cristalab.com/tips/47686/como-duplicar-un-movieclip-en-actionscript-3 |
|
|
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. |
|
|
Tampoco Funciona.... |
|
|
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. |
|
|
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);
} |
|
|
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 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. |
|
|
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. |
|
|
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 Ya nos cuentas a ver si te sirve. Suerte con el paint! |
|
|
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);
}
} |
|
|
Solucione mi problema, solamente tenia que poner la función CerraV fuera de la funcion CreaPre. Gracias llops por tu ayuda. (Gracias tambien a DiegoAzul y a master_of_puppetz por la intención. ) |
|
|
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
3 Tutoriales |
|
Ey Zguillez, está muy bien el tip! 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! |
|