Necesito optimizar código AS3; armé una galería de imágenes con partes de varios tutoriales, la galería se resumiría así: dentro de un mc contenedor (tira) hay una capa con botones (tn01, tn02, etc) y en otra capa esta un mc vació (imagenessss) donde se cargan las imágenes pequeñas desde un .txt.
Este contenedor es un slider que funciona con el movimiento del mouse.
Al hacer click en cada uno de los botones se carga una imagen distinta en un mc contenedor (luad) a través de un xml.
Existen dos botones (anterior_btn, siguiente_btn) que sirven para cambiar de imagen en el contenedor luad.
La galería funciona bien, pero existe mucho código, estoy seguro que se puede optimizar pero no tengo el conocimiento necesario, lo que necesito es:
1. Que todas las imágenes se carguen ya sea desde el .txt o desde el xml,
2. Optimizar el código de los botones para que cuando se agregue una nueva imagen no tenga que duplicar el código del botón y cambiar los nombres de las funciones por cada botón.
3.Agregar un preload a cada imagen, el existente es solo un mc continuo.
La ruta de los botones es tira.tn01, tira.tn02, etc
Las imágenes grandes se encuentran en la misma carpeta que el swf con nombres sucesivos image_01.jpg, image_02.jpg, etc y las imágenes pequeñas están dentro de una carpeta llamada thumbails con nombres thumb_01.jpg, thumb_02.jpg, etc
Dejo el código utilizado, y un enlace para que vean el ejemplo
http://www.desincmultimedia.com/tanques/galeria23fla.html
Espero su colaboración, muchas gracias
Código ActionScript :
//slide var maxX:Number = 0; var minX:Number = stage.stageWidth - (tira.width+40); tira.addEventListener (Event.ENTER_FRAME, fScroll); function fScroll(evt:Event):void{ var incrX:Number= -((stage.mouseX - (stage.stageWidth/2))/(stage.stageWidth/2))*20; tira.x = Math.max (Math.min(tira.x+incrX, maxX), minX); } //imágenes pequeñas var dataReq:URLRequest = new URLRequest("images.txt"); var dataLdr:URLLoader = new URLLoader(); dataLdr.dataFormat = URLLoaderDataFormat.VARIABLES; dataLdr.addEventListener( Event.COMPLETE, fPrepararEscena ); dataLdr.load( dataReq ); var arrImagenes:Array = new Array(); var spImagenes:Sprite; var imgAncho:uint = 68; // Ancho de las imágenes var imgAlto:uint = 40; // Alto de las imágenes var imgEspacio:uint = 10; // Espacio entre las imágenes function fPrepararEscena( evt:Event ):void { arrImagenes = dataLdr.data.imagenes.split( " " ); spImagenes = new Sprite(); spImagenes.y = 0; // Posición vertical del contenedor // Iteramos entre los índices del Array de imágenes for( var i:uint = 0; i < arrImagenes.length; i++ ){ var imgReq:URLRequest = new URLRequest(arrImagenes[ i ]); var imgLdr:Loader = new Loader(); imgLdr.load( imgReq ); imgLdr.x = imgEspacio + ( i * ( imgEspacio + imgAncho ) ); spImagenes.addChild( imgLdr ); } tira.imagenessss.addChild( spImagenes ); } //imágenes grandes var carga:URLLoader = new URLLoader(); //define una variable carga de tipo URLLoader que servirá para cargar el archivo XML var xmlExterno:XML; //define una variable xmlExterno de tipo XML var i:Number=0; //esta variable inicializada en O permitira navegar dentro de los nodos del XML var lista:XMLList; //define una variable lista de tipo XMLList la cual es una clase que permite interactuar con los nodos del archivo XML var total:Number; //esta variable corresponderá mas adelante al número de nodos hijos del XML var fotos = new Loader(); //define una variable fotos de tipo Loader la cual es una clase que sirve para cargar imagenes o swf externos luad.addChild(fotos); fotos.x = 0; //posicion x de las imagenes que se cargaran fotos.y=0; //posicion y de las imagenes que se cargaran carga.load(new URLRequest("galeria.xml")); //el metodo load carga la información que el URLRequest captura del XML carga.addEventListener(Event.COMPLETE,cargarXML); //agregamos un listener a la carga para que ejecute la función cargarXML cuando la carga del XML se complete function cargarXML(evento:Event) //funcion ejecutada por el listener, por ese motivo recibe como parametro la variable evento de tipo Event { xmlExterno = new XML(evento.target.data) //a la variable xmlExterno se le asigna los datos cargados por la variable carga lista=xmlExterno.children(); //la variable lista guarda los nodos "hijos" del nodo principal del XML total=lista.length(); //la variable total guarda el número de nodos que en este caso es el número de imágenes fotos.load(new URLRequest(lista[i].attribute("imagen"))); //carga la imagen que se encuentra en la ruta descrita en el atributo imagen del primer nodo } //botones anterior y siguiente siguiente_btn.addEventListener(MouseEvent.CLICK, siguiente); //listener del boton siguiente que ejecuta la función siguiente anterior_btn.addEventListener(MouseEvent.CLICK, atras); //listener del boton anterior que ejecuta la función atras function siguiente(event:MouseEvent) { if (i<total-1) //si se esta mostrando la penultima foto (cuando i=2) o anteriores { i++; fotos.load(new URLRequest(lista[i].attribute("imagen"))); //carga la imagen que se encuentra en la ruta descrita en el atributo imagen } } function atras(event:MouseEvent) { if (i>0) //si se esta mostrando la segunda foto (cuando i=1) o siguientes { i--; //reduce en 1 el valor de i fotos.load(new URLRequest(lista[i].attribute("imagen"))); //carga la imagen que se encuentra en la ruta descrita en el atributo imagen } } //funciones de los botones tira.tn01.addEventListener(MouseEvent.CLICK, onclic01); function onclic01(event:MouseEvent){ fotos.load(new URLRequest(lista[0].attribute("imagen"))); } tira.tn02.addEventListener(MouseEvent.CLICK, onclic02); function onclic02(event:MouseEvent){ fotos.load(new URLRequest(lista[1].attribute("imagen"))); } tira.tn03.addEventListener(MouseEvent.CLICK, onclic03); function onclic03(event:MouseEvent){ fotos.load(new URLRequest(lista[2].attribute("imagen"))); } tira.tn04.addEventListener(MouseEvent.CLICK, onclic04); function onclic04(event:MouseEvent){ fotos.load(new URLRequest(lista[3].attribute("imagen"))); } tira.tn05.addEventListener(MouseEvent.CLICK, onclic05); function onclic05(event:MouseEvent){ fotos.load(new URLRequest(lista[4].attribute("imagen"))); } tira.tn06.addEventListener(MouseEvent.CLICK, onclic06); function onclic06(event:MouseEvent){ fotos.load(new URLRequest(lista[5].attribute("imagen"))); } tira.tn07.addEventListener(MouseEvent.CLICK, onclic07); function onclic07(event:MouseEvent){ fotos.load(new URLRequest(lista[6].attribute("imagen"))); } tira.tn08.addEventListener(MouseEvent.CLICK, onclic08); function onclic08(event:MouseEvent){ fotos.load(new URLRequest(lista[7].attribute("imagen"))); } tira.tn09.addEventListener(MouseEvent.CLICK, onclic09); function onclic09(event:MouseEvent){ fotos.load(new URLRequest(lista[8].attribute("imagen"))); } tira.tn10.addEventListener(MouseEvent.CLICK, onclic10); function onclic10(event:MouseEvent){ fotos.load(new URLRequest(lista[9].attribute("imagen"))); }