Como crear un menú dinámico con Actionscript 3.0 y XML

Etiquetas: URLLoader URLRequest currentTarget

Este ejemplo intenta mostrar una forma básica de hacer un menú dinámico con Flash y XML. La misma teoria que se aplica aquí para crear los elementos del menú, se puede aplicar en la creación, por ejemplo, de una galeria de imágenes o videos.

La idea es hacer un menú cuyos elementos se crean a partir de los nodos de un XML. De esta forma se hace más sencillo el mantenimiento del menú, ya que por ejemplo para añadir un botón solo habría que añadir un nuevo nodo con los contenidos necesarios. El XML que vamos a utilizar es este:

  1.  
  2. <?xml version="1.0" encoding="utf-8" ?>
  3. <data>
  4. <elementos>
  5. <elemento>
  6. <titulo>Google</titulo>
  7. <enlace>http://www.google.com</enlace>
  8. </elemento>
  9. <elemento>
  10. <titulo>Yahoo</titulo>
  11. <enlace>http://www.yahoo.com</enlace>
  12. </elemento>
  13. <elemento>
  14. <titulo>Altavista</titulo>
  15. <enlace>http://www.altavista.com</enlace>
  16. </elemento>
  17. <elemento>
  18. <titulo>Lycos</titulo>
  19. <enlace>http://www.lycos.com</enlace>
  20. </elemento>
  21. </elementos>
  22. </data>
  23.  

Vemos que cada elemento tiene un título, que vamos a poner en el texto del botón, y un enlace, que es la url que vamos a cargar al hacer click en el botón.

Una vez que tenemos el XML, vamos a flash y creamos el botón que vamos a utilizar para crear el menú. En este caso es un fondo blanco con un campo de texto dinámico llamado "Texto_txt". Una vez creado pulsamos con el botón derecho en el símbolo que tenemos en la biblioteca y seleccionamos "Vinculación". Tenemos que asociar el botón a la clase ElementoMenu, que es el nombre de clase que vamos a utilizar para crear los botones.

Vinculacion FLash Actionscript

Ahora vamos a cargar el XML. Creamos un URLLoader, añadimos los eventos, y creamos las funciones de carga y error. Se puede ver el proceso de carga más detallado en el tutorial de carga de XML en Actionscript 3.0 . Una vez cargado el XML y almacenado en la variable datos, llamamos a la función montar, donde vamos a crear el menú. Tenemos que recorrer todos los nodos, y crear un botón por cada nodo. Para recorrer los elementos con la estructura que hemos definido en el XML, tenemos que utilizar un for con este aspecto:

  1.  
  2. for (var i:uint = 0; i < datos.elementos.elemento.length(); i++) {
  3.  
  4. }
  5.  

En cada "vuelta" del for, vamos a crear un botón, rellenamos su campo Texto_txt con el nodo titulo, y almacenamos en una variable dentro del botón el valos del nodo enlace. Lo colocamos en "y" descendente según avanzamos para que salgan uno debajo de otro, y por último le añadimos un evento click que llama a la función navegar:

  1.  
  2. boton = new ElementoMenu();
  3. boton.Texto_txt.text = datos.elementos.elemento[i].titulo;
  4. boton.enlace = datos.elementos.elemento[i].enlace;
  5. boton.y = i * 25
  6. boton.buttonMode = true;
  7. boton.mouseChildren = false;
  8. boton.addEventListener(MouseEvent.CLICK, navegar);
  9. addChild(boton);
  10.  

Ahora, cada vez que hagamos click en un botón, se ejecutará la función navegar. En esta función recogemos el valor de la variable que hemos almacenado en enlace dentro del botón, por medio de currentTarget:

  1.  
  2. private function navegar(e:MouseEvent):void {
  3. navigateToURL(new URLRequest(e.currentTarget.enlace), "_blank");
  4. }

Espero haberlo explicado de una manera fácil. Para cualquier duda podéis utilizar los comentarios.

Comentarios:
Manuel López dijo:
Muy práctico y operativo este ejercicio. Quisiera conocer las mieles del mismo
Raul dijo:
holassssssssss
Ronald dijo:
Hola, tengo una pregunta pues no encuentro tu tuto para cargar el XML en "datos" que supongo es un Array, recien estoy tocando el AS3 espero me puedas ayudar con el codigo porq estoy q busco por todos lados como cargar mi XML en un array, gracias de antemano =)
ronald dijo:
nuevamente yo, mejor le doy algunos detalles mas a mi pregunta, no es exactamente q kiera lo del array sino q yo sabia cargar cosas del xml desde un array, pero mi verdadero es q nose hacer esto de cargar el xml en "datos", otra pregunta quizas es como cargar estos botones digamos en un Movieclip el cual se muestra como resultado de presionar un boton en la escena... espero me entiendas.
vektor dijo:
el xml debe ser introducido en flash 9 . . . .?? como puedo conseguir el away 3d ?? . . .gracias
andrea gonzalez dijo:
buenisimo
FuDdY dijo:
Hola. Muy buen tutorial. Apenas empiezo en esto de las aplicaciones en flash y he tenido un problema. Finalmente logre hacer que se carguen las imagenes, ahora lo que quisiera hacer es poder incustrar la pelicula flash (*.swf) en una pagina web. Usando el metodo de publicacion que viene en Flash CS3, me genera el codigo HTML, pero al tratar de ejecutar la aplicacion, no carga nada ni marca algun error. Hay alguna forma de saber que es lo que pasa ???
alfonso gonzalez dijo:
Hola estoy intentando montar una galeria que esta ya prediseñada en esta pagina, pero no puedo ya que tiene que quedar en el fotograma de la Galeria que en este caso esta anidado en el de las paginas. esta pag. usa xml, pero no se como ponerla dentro
Gabriel dijo:
Hola! modificando los permisos de seguridad de flash funciona perfectamente en modo local...Felicidades y gracias por este utilìsimo material!. Gabriel.
orlandosdj dijo:
Hola! muy bien y muy practico
jaime dijo:
de donde sale la clase o mejor los nombres de las clases, ejemplo ElementoMenu ó flash.display.MovieClip. Es que de verdad no entiendo nada, ofresco disculpas jeje!
Dejar un comentario:
Tu nombre (obligatorio):

E-mail (obligatorio, no se mostrará):

Web: