Comunidad de diseño web y desarrollo en internet online

Duplicar movieclips

Citar            
MensajeEscrito el 16 Abr 2009 09:29 am
Hola,

me he propuesto a mi mismo un ejercicio sencillo para aprender as3, quiero hacer un reflejo de imagen, tipo web2.0.

Pero lo que parecia sencillo en principio, se me esta complicando, sobre todo por la ausencia de un metodo nativo para duplicar movieclips en as3.

Se que hay muchos posts al respecto, pero investigando por la web he encontrado una clase creada por un usuario, que tiene bastante buenas criticas. La clase se puede encontrar en esta pagina, y por lo que dicen en los comentarios, solo falla con algunos constructores.

Por eso y porque tengo bastante poca idea de as3 pienso que el fallo debe estar en mi codigo:

Código :

package 
{
   import flash.display.DisplayObject;
   import flash.display.Loader;
   import flash.display.MovieClip;
   import flash.display.Sprite;
   import flash.events.Event;
   import flash.events.ProgressEvent;
   import flash.filters.GlowFilter;
   import flash.geom.Rectangle;
   import flash.net.URLRequest;
   import com.senocular.display.duplicateDisplayObject;
   
   /**
    * ...
    * @author ...
    */
   public class ReflectionImage extends Sprite 
   {
      public var imageLoader:Loader;
      public var percentLoaded:Number;
      public var imageReflection:Sprite;
      
      
      public function ReflectionImage():void {   
         if (stage) init();
         else addEventListener(Event.ADDED_TO_STAGE, init);
      }
      
      private function init(e:Event = null):void {
         removeEventListener(Event.ADDED_TO_STAGE, init);
         // entry point
         
         var ldr:Loader = new Loader();
         ldr.load(new URLRequest("imagenes/amourchaleurcom.jpg"));
         ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler, false, 0, true);
         ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler, false, 0, true);         
      }

      /* On load progress, updated the variable containing the percent loaded */
      private function progressHandler(event:ProgressEvent):void {
         percentLoaded = Math.floor(event.bytesLoaded / event.bytesTotal * 100);
      }
      
      private function completeHandler(event:Event):void {
         imageReflection = new Sprite;
         addChild(imageReflection);
         
         var originalImage:DisplayObject = event.target.content;
         
         imageReflection.addChild(originalImage);
         
/*** @@  ***/   var reflectedImage:DisplayObject = duplicateDisplayObject(originalImage, true);
         reflectedImage.x += 300; // shift to see duplicate
         trace(reflectedImage.height); // 0
      }
      
   }
   
}


En él, cargo una imagen y a continuacion intento duplicarla con la mencionada clase (en la linea precedida con las dos @). Aunque la imagen que cargo inicialmente se ve sin ningún problema, la imagen clonada no me aparece, y aunque al tracear sus atributos me aparecen alpha=1, visible=true, x=300, etc, su anchura y altura me dan 0. ¿Qué puedo estar haciendo mal?

Gracias y un saludo.

Por akhasis

75 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Abr 2009 10:20 am
Es que la función duplicateDisplayObject SÓLO crea un un DisplayObject idéntico al que copia pero "The only thing duplicateMovieClip does that this does not is copy dynamic drawing information." Vamos, ni imágenes cargadas en el MovieClip, ni gráficos dibujados en tiempo de ejecución mediante graphics.circle, o graphics.line

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Abr 2009 11:09 am
Gracias por tu ayuda, Eliseo2.

¿Cuál es la mejor opción entonces para obtener una copia de la imagen es volver a cargarla desde el servidor con otro imageLoader?

La verdad, no entiendo mucho este sistema, con lo facil que era el duplicateMovieClip en as2. Cierto que te da mas control sobre el movieclip duplicado, pero para que quieres tanto control si no se pueden hacer ni siquiera las cosas sencillas?

Un saludo

Por akhasis

75 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Abr 2009 12:18 pm
Hola

Yo usaria BitmapData....

Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 16 Abr 2009 02:01 pm
Akasis, eso mismo que sucede ahora, sucedía exactamente igual con AS.2
Tal y como dice Alfathenus, puedes usar BitmapData para duplicar la imagen -realmente Bitmap y BitmapData- (Fijaté en la función duplicateImage del ejemplo del final) y nos cuentas

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Abr 2009 03:27 pm
Muchas gracias alfathenus y Eliseo2,

antes de leer vuestras respuestas ya estaba intentandolo con BitmapData, pero dando palos de ciego, ha sido el ejemplo que me habeis recomendado de la referencia de as3 el que me lo ha terminado de aclarar. Qué fácil es hacerlo cuando sabes...

Por akhasis

75 de clabLevel



 

firefox

 

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