Comunidad de diseño web y desarrollo en internet online

AS3 addchild xml

Citar            
MensajeEscrito el 08 Jul 2011 12:37 pm
Hola buenos dias para todos!
Tengo una galeria y estoy tratando de ubicar las imagenes con un addchild de cierta forma y no lo logro hacer.
Le doy las coordenadas x e y y funciona perfecto, mi problema es que necesito ordenarlo de derecha a izquierda y no se como hacer.

Se me ocurren 2 formas, una ubicarlo dentro de un movieClip y la otra restarle el tamaño de la imagen.

El problema es que no se como hacer ninguna de las 2 opciones.

Les dejo el codigo que utilizo hoy por si alguien se le ocurre alguna otra forma:

Código ActionScript :

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 
addChild(fotos); //ubica en el stage el "contenedor" de las imagenes 
fotos.x = 100; //posicion x de las imagenes que se cargaran 
fotos.y=50; //posicion y de las imagenes que se cargaran 

carga.load(new URLRequest("21.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 
    descripcion_txt.text=lista[i].attribute("descripcion"); //asigna al texto dinamico descripcion_txt el contenido del atributo descripcion el primer nodo 
    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 
} 

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++; 
       descripcion_txt.text=lista[i].attribute("descripcion"); //asigna al texto dinamico descripcion_txt el contenido del atributo descripcion 
       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 
       descripcion_txt.text=lista[i].attribute("descripcion"); //asigna al texto dinamico descripcion_txt el contenido del atributo descripcion 
       fotos.load(new URLRequest(lista[i].attribute("imagen"))); //carga la imagen que se encuentra en la ruta descrita en el atributo imagen 
   } 
}  


muchas gracias!

Por pelao

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 Jul 2011 01:33 pm
Dos ideas. La primera y mas obvia ... hay cientos de galerías de fotos, es un clásico de flash y del que empieza a programar en Flash, quizás estudiar alguna te aporte ideas.
Lo segundo: en tu code reutilizas el mismo Loader, es decir todas las fotos aparecen en el mismo lugar reemplazando la anterior ... ¿para que necesitas ordenar hacia la derecha?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Jul 2011 01:38 pm
Hola jorge, gracias por la respuesta.

Es una galeria que necesito ordenarla del lado derecho por la disposición del sitio.
Acabo de crear un MovieClip y como vertice seleccione el angulo superior derecho, le puse de nombre de instancia (aca), pero me lo sigue alineando desde ese punto para la izquierda.

Código ActionScript :

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
MovieClip(aca).addChild(fotos); // Agregamos 


je, no se si se puede hacer lo que estoy pensando, pero lo vi en algún sitio estoy seguro.

Gracias!

Por pelao

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 Jul 2011 01:40 pm
No, siempre que hagas carga externa, el punto de anclaje es el ángulo superior izquierdo. Para que puedas hacer eso tienes que hacer un contenedor que dentro tenga el Loader en la ubicación que necesitas, y que ese Loader cargue las fotos, luego ubicas el contenedor donde se te cante

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Jul 2011 01:45 pm
Gracias Jorge, voy a intenar hacer eso haber si me sale.

Abrazo!

Por pelao

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 Jul 2011 06:12 pm
lo logre hacer, pongo el codigo por si a alguien le sirve. Lo hice en una classe:

Código ActionScript :

package {
   //Primero debemos importar los paquetes correspondientes:
//Creamos el Easing
   import flash.display.*;
   import flash.events.*;
   import flash.text.*;
   import flash.net.*;
   import fl.transitions.*;
   import fl.transitions.easing.*;

   
   public class Main21 extends MovieClip {
      public var currentImg:Number;
      public var lastImg:Number;
      public var xml:XML;
      public var loader:Loader;
      public var xmlLoader:URLLoader;
      
      public function Main21() {
         loader = new Loader();
         addChild(loader);
         
         xmlLoader = new URLLoader(new URLRequest("21.xml"));
         xmlLoader.addEventListener(Event.COMPLETE, parseXML);
         
         left_mc.stop();
         right_mc.stop();
      }
      
      protected function parseXML(event:Event):void {
         left_mc.addEventListener(MouseEvent.MOUSE_UP, nextImg);
         left_mc.addEventListener(MouseEvent.MOUSE_OUT, arrowOut);
         left_mc.addEventListener(MouseEvent.MOUSE_OVER, arrowOver);
         right_mc.addEventListener(MouseEvent.MOUSE_UP, prevImg);
         right_mc.addEventListener(MouseEvent.MOUSE_OUT, arrowOut);
         right_mc.addEventListener(MouseEvent.MOUSE_OVER, arrowOver);
         
         xml = new XML(event.currentTarget.data);
         lastImg = xml.img.length() - 1;
         currentImg = 0;
         loadImg();
      }
      
      protected function loadImg():void {
         loader.x = 960;
         loader.y = 30;
         loader.load(new URLRequest(xml.@dir + xml.img[currentImg].@file));
         loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadFin);
         loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadFin2);
         var mover:Tween = new Tween(loader,"x",Elastic.easeInOut, loader.x, 960 - Number(xml.img[currentImg].@width),3, true)

      }
      
      protected function loadFin(event:Event):void {
         textDisp_TF.htmlText = xml.img[currentImg];
      }
      
      protected function loadFin2(event:Event):void {
         textDisp_TF2.htmlText = xml.img[lastImg];
      }
      
      protected function arrowOut(event:MouseEvent):void {
         MovieClip(event.currentTarget).gotoAndStop(1);
      }
      
      protected function arrowOver(event:MouseEvent):void {
         MovieClip(event.currentTarget).gotoAndStop(2);
      }
      
      protected function nextImg(event:MouseEvent):void {
         loader.unload();
         currentImg = (currentImg < lastImg)? currentImg + 1 : 0;
         loadImg();
      }
      
      protected function prevImg(event:MouseEvent):void {
         loader.unload();
         currentImg = (currentImg > 0)? currentImg - 1 : lastImg;
         loadImg();
      }
   }
}


Saludos!

Por pelao

18 de clabLevel



 

msie8

 

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