Comunidad de diseño web y desarrollo en internet online

Clase para generar Galeria automaticamente

Citar            
MensajeEscrito el 17 Ago 2010 06:45 pm
Buenas tardes,

Llevo un par de días, intentando crearme una clase que me genere una "galeria" automaticamente desde un archivo XML, tan solo necesito un movieclip que ponga las imagenes una al lado de la otra , hasta cierta columna, que entonces sigue añadiendo debajo.

LA estoy sacando de un tutorial de Cristalab, si no me falla la memoria, entonces las columnas , los datos de tamaños, etc los paso por el XML, de momento yo he conseguido, que me lea el archivo XML, que inserte las imagenes, pero me las coloca una encima de la otra, no al lado.

He revisado el codigo mil veces, no lo logro entender, el mismo codigo , en la Timeline Funciona, en cambio en la clase, pasa olimpicamente de las posiciones, adjunto aqui la clase, para ver si alguien ve por que no las posiciona ,


Muchas gracias de antemano,

Código Flex :

package eu.clases{
   import fl.controls.ProgressBar;
   import fl.transitions.Tween;
   import fl.transitions.easing.*;
   import fl.transitions.TweenEvent;
   import flash.text.TextFieldType;
   import flash.utils.Timer;
   import flash.display.Shape;
   import flash.display.GradientType;
   import flash.geom.Matrix;
   import flash.events.KeyboardEvent;
   import flash.ui.Keyboard;
   import flash.display.SimpleButton;
   import flash.events.MouseEvent;
   import flash.display.Shape;
   import flash.display.Graphics;
   import flash.display.Stage;
   import flash.display.MovieClip;
   import flash.display.Sprite;
   import flash.display.Loader;
   import flash.events.*;
   import flash.net.URLRequest;
   import flash.net.URLLoader;


   public class CrearGaleria extends MovieClip {
      var columns:Number;
      var my_x:Number;
      var my_y:Number;
      var my_thumb_width:Number;
      var my_thumb_height:Number;
      var my_images:XMLList;
      var my_total:Number;

      var container_mc:MovieClip;
      var preloaders_mc:MovieClip;
      var full_mc:MovieClip;
      //var galeria:String = new String;

      var x_counter:Number=0;
      var y_counter:Number=0;

      var my_tweens:Array=[];
      var container_mc_tween:Tween;
      var full_tween:Tween;
      var myXMLLoader:URLLoader=new URLLoader  ;
      
      private var req:URLRequest;

      // Constants:
      // Public Properties:
      // Private Properties:

      // Initialization:
      public function CrearGaleria(galeria):void {
         
         myXMLLoader = new URLLoader(new URLRequest(galeria));
         myXMLLoader.addEventListener(Event.COMPLETE, processXML);
         
         

      }
      
      function setMyXMLLoader(galeria) {
         trace("set1");
         myXMLLoader.load(new URLRequest(galeria));
         trace("set2");
         myXMLLoader.addEventListener(Event.COMPLETE,processXML);
         trace("set3");

      }
      
      // Public Methods:
      function processXML(e:Event):void {
         var myXML:XML=new XML(e.target.data);

         columns=myXML.@COLUMNS;
         my_x=myXML.@XPOSITION;
         my_y=myXML.@YPOSITION;
         my_thumb_width=myXML.@WIDTH;
         my_thumb_height=myXML.@HEIGHT;
         my_images=myXML.IMAGE;
         my_total=my_images.length();
         createContainer();
         callThumbs();
         myXMLLoader.removeEventListener(Event.COMPLETE,processXML);
         myXMLLoader=null;
      }

      function createContainer():void{
         var prueba:MovieClip = new MovieClip;
         container_mc=new MovieClip  ;
         container_mc.x=my_x;
         container_mc.y=my_y;
         container_mc.width=600;
         addChild(container_mc);
         container_mc.addEventListener(MouseEvent.CLICK,callFull);
         container_mc.addEventListener(MouseEvent.MOUSE_OVER,onOver);
         container_mc.addEventListener(MouseEvent.MOUSE_OUT,onOut);
         container_mc.buttonMode=true;

         preloaders_mc=new MovieClip  ;
         preloaders_mc.x=container_mc.x;
         preloaders_mc.y=container_mc.y;
         
         
         addChild(preloaders_mc);
         trace(container_mc.width);
      }

      function callThumbs():void {
         for (var i:Number=0; i<my_total; i++) {
            trace(container_mc.width);
            var thumb_url=my_images[i].@THUMB;
            trace("callThums"+i);
            var thumb_loader=new Loader  ;
            thumb_loader.load(new URLRequest(thumb_url));
            thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,thumbLoaded);

            thumb_loader.name=i;
            trace(my_thumb_width);
            trace(x_counter);
            thumb_loader.x=my_thumb_width+10*x_counter;
            thumb_loader.y=my_thumb_height+10*y_counter;

            if (x_counter+1<columns) {
               x_counter++;
            } else {
               x_counter=0;
               y_counter++;
            }
            var preloader_pb:ProgressBar=new ProgressBar  ;
            preloader_pb.source=thumb_loader.contentLoaderInfo;
            preloader_pb.x=thumb_loader.x;
            preloader_pb.y=thumb_loader.y;
            preloader_pb.width=my_thumb_width;
            preloader_pb.height=my_thumb_height;
            //preloaders_mc.width=600;
            preloaders_mc.addChild(preloader_pb);
            
            preloader_pb.addEventListener(Event.COMPLETE,donePb);
         }
      }

      function thumbLoaded(e:Event):void {
         var my_thumb:Loader=Loader(e.target.loader);
         container_mc.addChild(my_thumb);
         my_tweens[Number(my_thumb.name)]=new Tween(my_thumb,"alpha",Strong.easeIn,0,1,0.5,true);

         my_thumb.contentLoaderInfo.removeEventListener(Event.COMPLETE,thumbLoaded);
      }

      function callFull(e:MouseEvent):void {
         var full_loader:Loader=new Loader  ;
         var full_url=my_images[e.target.name].@FULL;
         full_loader.load(new URLRequest(full_url));
         full_loader.contentLoaderInfo.addEventListener(Event.INIT,fullLoaded);

         var full_pb:ProgressBar=new ProgressBar  ;
         full_pb.source=full_loader.contentLoaderInfo;
         full_pb.x=stage.stageWidth-full_pb.width/2;
         full_pb.y=stage.stageHeight-full_pb.height/2;
         preloaders_mc.addChild(full_pb);

         full_pb.addEventListener(Event.COMPLETE,donePb);

         container_mc.removeEventListener(MouseEvent.CLICK,callFull);
         container_mc.buttonMode=false;
         container_mc.removeEventListener(MouseEvent.MOUSE_OVER,onOver);
         container_mc.removeEventListener(MouseEvent.MOUSE_OUT,onOut);
         container_mc_tween=new Tween(container_mc,"alpha",Strong.easeIn,1,0.5,0.5,true);
      }
      function fullLoaded(e:Event):void {
         full_mc=new MovieClip  ;
         full_mc.buttonMode=true;
         addChild(full_mc);
         var my_loader:Loader=Loader(e.target.loader);
         full_mc.addChild(my_loader);
         full_tween=new Tween(my_loader,"alpha",Strong.easeIn,0,1,0.5,true);
         my_loader.x=stage.stageWidth-my_loader.width/2;
         my_loader.y=stage.stageHeight-my_loader.height/2;
         my_loader.addEventListener(MouseEvent.CLICK,removeFull);

         my_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,fullLoaded);
      }
      function removeFull(e:MouseEvent):void {
         var my_loader:Loader=Loader(e.currentTarget);
         full_tween=new Tween(my_loader,"alpha",Strong.easeOut,1,0,0.5,true);
         full_tween.addEventListener(TweenEvent.MOTION_FINISH,tweenFinished);

         container_mc_tween=new Tween(container_mc,"alpha",Strong.easeOut,0.5,1,0.5,true);
      }

      function donePb(e:Event):void {
         var my_pb:ProgressBar=ProgressBar(e.target);
         preloaders_mc.removeChild(my_pb);
         my_pb.removeEventListener(Event.COMPLETE,donePb);
      }

      function tweenFinished(e:TweenEvent):void {
         var my_loader:Loader=Loader(e.target.obj);
         my_loader.unload();
         full_mc.removeChild(my_loader);// This line was removeChid(my_loader), just add full_mc before it.
         removeChild(full_mc);
         full_mc=null;

         container_mc.addEventListener(MouseEvent.CLICK,callFull);
         container_mc.buttonMode=true;
         container_mc.addEventListener(MouseEvent.MOUSE_OVER,onOver);
         container_mc.addEventListener(MouseEvent.MOUSE_OUT,onOut);

         var my_tween:Tween=Tween(e.target);
         my_tween.removeEventListener(TweenEvent.MOTION_FINISH,tweenFinished);
      }
      function onOver(e:MouseEvent):void {
         var my_thumb:Loader=Loader(e.target);
         my_thumb.alpha=0.5;
      }
      function onOut(e:MouseEvent):void {
         var my_thumb:Loader=Loader(e.target);
         my_thumb.alpha=1;
      }
      // Protected Methods:
   }

}




Y ya de paso contribuimos con una clase ! Espero vuestros comentarios

Por erone

16 de clabLevel



 

msie8
Citar            
MensajeEscrito el 17 Ago 2010 08:05 pm
230 líneas ... mmm ... ¿cual es el método que posiciona lo que se superpone?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 17 Ago 2010 08:55 pm
Es el metodo createContainer y el callThumbs, según hasta donde yo llegan mis conocimientos, en esos coge los datos del XML, que son columnas , tamaño, y, x. Y con el for empieza a crear los thumbnails,

El unico addChild al stage es el de container_mc y preloader_mc, por esono acabo de comprender como puede funcionar el mismo codigo en la TimeLine y en la clase actúe de manera distinta, sin cambiar nada... el codigo es el mismo , se me escapa y no se que es...


Muchas gracias , por tu ayuda.

Por erone

16 de clabLevel



 

msie8
Citar            
MensajeEscrito el 17 Ago 2010 09:12 pm
Prueba haciendo en thumbLoaded

var my_thumb:DisplayObject=DisplayObject(e.target.content);

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 19 Ago 2010 11:19 pm
BUenas noches,

Siento haberlo probado tan tarde, usando , el display Object, aparece nada más una foto o todas exactamente puestas una debajo de la otra pareciendo que haya 1. Luego las funciones onOut onOver, daban error por conversion forzada. Tambien les puse Display Object , pero entonces me dice que hace referencia a un objeto nulo, si comento estas lineas para que no llame a estas funciones, igualmente solo se posicionan en el mismo sitio , y no funciona la función Click
Error #2044: IOErrorEvent no controlado: text=Error #2035: No se encuentra la dirección URL.

no acabo de entender el porque necesita tanto cambio si me funcionaba perfectamente en la TimeLine....estoy sin ideas y no se por donde enfocarlo , me he obsesionado con que funcionaba , y ahora no se que puede estar mal.

Segun los tracers entra en todo , los parametros del fichero son correctos , no sé... muchas gracias por tu ayuda igualmente, se te ocurre algo más ?

Por erone

16 de clabLevel



 

msie8
Citar            
MensajeEscrito el 19 Ago 2010 11:31 pm
PErdona Jorge por la tabarra, despues de añadir todos los tracers posibles, he visto lo siguiente :

thumb_loader.x=(my_thumb_width+10)*x_counter;
thumb_loader.y=(my_thumb_height+10)*y_counter;


Faltaban los parentesis... maravillosos tracers.... me ha costado ...

Falta perfilarla pero ya casi funciona a la perfeccion :D


Muchisimas gracias Jorge, por tu aporte

Por erone

16 de clabLevel



 

msie8

 

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