Flash MX - Menu (Botón con estado activo)

Aunque el menú del ejemplo, no contiene ningún efecto espectacular, el código usado para construirlo es muy interesante, ya que se observan diferentes técnicas de escritura actionScript imprescindibles para crear un código bien estructurado.

  • Uso de textFormat
  • uso de arrays bidimensionales
  • deshabilitar un botón

Ejemplo

This movie requires Flash Player 8

Para crear este menú, tan solo es necesario crear un clip de película como el que puedes ver en la imagen, dicho clip de película consta unicamente de un campo de texto.

menu03_img01.jpg

Vincular el clip de película

El clip de película debe estar vinculado para exportar a actionScript.

  1. Selecciona el clip de película en tu biblioteca.
  2. Haz clic con el botón derecho del ratón.
  3. Selecciona la opción Vinculación... del menú contextual.
  4. En la ventana de dialogo Propiedades de vinculación, selecciona el botón de opción Exportar para actionScript.

Código actionScript

En primer lugar, se definen las funciones que se utilizarán, en este caso prototipos. Estos prototipos, responden a los diferentes eventos de clip de película (onRollOver, onRollOut y onRelease)

Acciones para el evento onRollOver, la función de este prototipo es cambiar el color del botón al pasar el puntero.

Actionscript:
  1. MovieClip.prototype.TLonRollOver = function() {
  2.     formato.color = 0x991F36;
  3.     this.texto.setTextFormat(formato);
  4. };

Acciones para el evento onRollOut, devuelve el botón a su estado original (reposo)

Actionscript:
  1. MovieClip.prototype.TLonRollOut = function() {
  2.     formato.color = 0x666666;
  3.     this.texto.setTextFormat(formato);
  4. };

El prototipo encargado de las acciones para el evento onRelease, es un poco más complejo.

Actionscript:
  1. MovieClip.prototype.TLonRelease = function() {
  2.     // -- restaura todos los botones a su estado original
  3.     for (i=0; i<menu.length; i++) {
  4.         item = eval("boton_mc"+i);
  5.         item.enabled = true;
  6.         item.useHandCursor = true;
  7.         formato.color = 0x666666;
  8.         item.texto.setTextFormat(formato);
  9.     }
  10.     // -- carga el clip de película en un clip contenedor
  11.     holder_mc.loadMovie(this.pelicula);
  12.     // -- deshabilita el botón pulsado
  13.     this.enabled = false;
  14.     // -- deshabilita el cursor en forma de mano
  15.     this.useHandCursor = false;
  16.     // -- para indicar que el botón se encuentra activo
  17.     // -- se cambia el color de texto por uno más tenue.
  18.     formato.color = 0xCCCCCC;
  19.     this.texto.setTextFormat(formato);
  20. };

Se crea un objeto textFormat

Actionscript:
  1. formato = new TextFormat();
  2. formato.font = "Verdana";
  3. formato.size = 10;
  4. formato.color = 0x666666;

Los elementos del menú tales como el texto de los botones y su enlace
correspondiente se definen en un array bidimensional.

Actionscript:
  1. menu = new Array();
  2. menu[0] = {titulo:"Home", pelicula:"home.swf"};
  3. menu[1] = {titulo:"Opción 1", pelicula:"opcion1.swf"};
  4. menu[2] = {titulo:"Opción 2", pelicula:"opcion2.swf"};
  5. menu[3] = {titulo:"Opción 3", pelicula:"opcion3.swf"};
  6. menu[4] = {titulo:"Opción 4", pelicula:"opcion4.swf"};
  7. menu[5] = {titulo:"Opción 5", pelicula:"opcion5.swf"};
  8. menu[6] = {titulo:"Opción 6", pelicula:"opcion6.swf"};

Crea un clip de película contenedor

Actionscript:
  1. this.createEmptyMovieClip("holder_mc", this.getNextHighestDepth());
  2. holder_mc._x = 0;
  3. holder_mc._y = 0;

Lectura del array con un bucle for para la construcción del menú.

Actionscript:
  1. formato.color = 0x666666;
  2. for (i=0; i<menu.length; i++) {
  3.     // --se crean nuevas instancias del clip vinculado
  4.     attachMovie("boton_mc", "boton_mc"+i, this.getNextHighestDepth());
  5.     anterior = eval("boton_mc"+(i-1));
  6.     item = eval("boton_mc"+i);
  7.     item.pelicula = menu[i].pelicula;
  8.     item.texto.autoSize = true;
  9.     item.texto.text = menu[i].titulo;
  10.     item.texto.setTextFormat(formato);
  11.     // -- posicionamiento x-y
  12.     item._y = 10;
  13.     if (i == 0) {
  14.         item._x = 10;
  15.     } else {
  16.         item._x = anterior._x+anterior._width;
  17.     }

Eventos de botón.

Actionscript:
  1. item.onRollOver = this.TLonRollOver;
  2.     item.onRollOut = this.TLonRollOut;
  3.     item.onRelease = this.TLonRelease;
  4. }

Una de las ventajas que me gustaría resaltar: no hay que preocuparse de la separación entre botones, esta es exactamente igual para cada uno de ellos.

Nota
Cualquier consulta sobre este tutorial o .fla debe realizarse en el foro.

Descarga Menu Botón Estado Activo.zip

Menu Botón Estado Activo.zip se ha descargado 3,268 veces.

1 Votes | Average: 5 out of 51 Votes | Average: 5 out of 51 Votes | Average: 5 out of 51 Votes | Average: 5 out of 51 Votes | Average: 5 out of 5 (1 votos, promedio: 5 sobre 5)
Loading ... Loading ...

8 Responses to “Flash MX - Menu (Botón con estado activo)”


  1. 1 knoart May 13th, 2007 at 2:21 am

    Hola Toni, tengo una pequeña duda hacerca de si es posible cambiar la posición de los botones de este menú, me gustaría alinearlos de forma diferente (en posición vertical). Si modifico los valores _x _y me lo sigue moviendo en bloque. tienes alguna solución??

    Gracias por adelantado!
    Salu2

  2. 2 toni May 13th, 2007 at 6:44 pm

    Hola knoart,

    deberías anular lo siguiente:

    Actionscript:
    1. // -- posicionamiento x-y
    2.     item._y = 10;
    3.     if (i == 0) {
    4.         item._x = 10;
    5.     } else {
    6.         item._x = anterior._x anterior._width;
    7.     }

    Antes del for, escribes:

    Actionscript:
    1. var y = 0 // o la posición _y inicial que quieras

    Y donde quitaste el código anterior, escribir:

    Actionscript:
    1. // -- posicionamiento x
    2. item._y = y
    3. y  +=10 // o la distancia de interlineado que quieras

    saludos

  3. 3 nachofig Sep 5th, 2007 at 3:31 pm

    muy bueno. Se puede hacer tambien que cambie el fondo del boton ? si se puede como sería. Gracias

  4. 4 Degas Sep 10th, 2007 at 4:22 pm

    Toni, muy bueno el menú!

    Cómo haría para cargar un swf.

    // -- Menú
    menu = new Array();
    menu[0] = {titulo:"1", pelicula:"d1.swf"};
    menu[1] = {titulo:"2", pelicula:"d2.swf"};
    menu[2] = {titulo:"3", pelicula:"d3.swf"};
    // -- clip contenedor

    Con esta sintaxis AS me tira un error.

    Agradecería una respuesta!

    Degas

  5. 5 toni Sep 11th, 2007 at 9:17 am

    Hola Dega,

    puedes hacer:

    holder_mc

    Actionscript:
    1. var holder_mc = _root.createEmptyMovieClip('holder_mc',_root.getNextHighestDepth())
    2. holder_mc.loadMovie(this.pelicula)

  6. 6 mario Dec 12th, 2007 at 11:12 am

    Hola toni,

    Por favor, ¿puedes ayudarme? ¿como puedo hacer para vaciar boton_mc attacheado para cada "for"?

    Me explico, es un menu para fotos (foto 1, foto 2...), y el numero de estas es variable segun el cliente. Por lo tanto, el valor maximo de "i" tambien lo es. Lo que ocurre es que no puedo vaciar boton_mc por lo que siempre me aparecen el numero de fotos del cliente que más tiene.

    ¿sabes que puedo hacer? removeMovieClip (ni funcion ni metodo) me funciona...y me esoty volviendo loco.

    Gracias y saludos!!!

  7. 7 Isabel Mar 7th, 2008 at 11:10 pm

    Hola solo quisiera saber como se puede poner un getUrl para cada elemento del menu... y la verdad me urge!!!

    Gracias y que tenga un buen dia

  8. 8 toni Mar 9th, 2008 at 10:13 pm

    Hola,

    modifica tu array asi:

    Actionscript:
    1. menu[1] = {titulo:"Opción 1", pelicula:"pagina.html"};

    y para el evento onRelease substituye:

    Actionscript:
    1. holder_mc.loadMovie(this.pelicula);

    por

    Actionscript:
    1. getURL(this.pelicula)

    saludos.

Leave a Reply




Subscribe

Subscribe to my RSS Feeds