17 11 06

Dos métodos para el efecto de RollOver

Escrito por: WeeDo en AS2, Flash, Tutoriales

Voy a comenzar a escribir unos tutoriales sobre Flash bien básico, ya que tengo la idea de crear una mini librería de tutoriales en mi Blog. En este caso voy a empezar con un clásico que es el efecto RollOver.
Para generar un botón con RollOver en un sitio o proyecto de Flash lo mejor es no usar un Botón. Esto suena bastante raro pero es así, ya que el objeto botón dentro de Flash esta mucho mas limitado que un MovieClip.
Obviamente que se puede lograr un buen efecto con un objeto Botón, pero en este caso usaremos un MovieClip ya que es mas cómodo y fácil en cierto punto.

Necesita el Flash Player 9

Bien voy a mostrarles dos formas de hacerlo, una con animación de entrada y salida, y otra con animación de entrada únicamente que será utilizada como animación de salida en reversa.

Con animación de entrada y salida:
Lo primero es crear un nuevo MovieClip que llamaremos en este ejemplo “boton� (muy creativo lo mió).

paso1

Dentro de este MC crearemos una animación que hará el botón cuando pasemos el Mouse por arriba y pegada a esa animación la animación que hará cuando saquemos el Mouse de arriba (animación de salida).
Puede ser cualquier cosa, un cuadrado moviéndose o cambiando de color. En este caso se moverá y cambiara de color.

La línea de tiempo queda algo así.

img2.jpg

En la capa que llamé “as� hay 5 KeyFrames muy simples. Los que tiene la marca de la “a� simplemente tiene una acción de stop(); para que el cabezal se detenga ahí.

Los otros dos KeyFrames son etiquetas para indicarle a donde tiene que ir el cabezal con cada evento del usuario.

Una vez hecha la animación de entrada y salida lo que hacemos es tirar el botón de la librería al escenario y con el mismo seleccionado le ponemos como nombre de instancia “boton_mc�.

img3.jpg

En la línea de tiempo creamos una nueva capa a la que llamaremos “as�, por ActionScript como hicimos dentro del MC del botón.

En esa capa escribiremos nuestro código que dirá algo así:

Actionscript:
  1. function roll(target_mc){
  2.    target_mc.onRollOver = function(){
  3.       this.gotoAndPlay("in");
  4.    }
  5.    target_mc.onRollOut = target_mc.onReleaseOutside = function(){
  6.       this.gotoAndPlay("out");
  7.    }
  8. }
  9. //
  10. roll(boton_mc);

Bien, pasemos a explicar este código.
Primero lo que hacemos es crear una función que se llama “roll�, a la cual le pasamos como parámetro una variable que será el nombre del MC al cual le aplicaremos el efecto de RollOver.

Dentro de esta función estamos manejando dos eventos, aunque en realidad son tres.

El primero es onRollOver. Este evento lo que hace es que cuando el Mouse este arriba de nuestro MovieClip le de Play a la línea de tiempo del MC pasado como parámetro desde el KeyFrame llamado “in�.
El segundo evento es onRollOut, que hace que la línea de tiempo del mismo MC haga Play desde “out�.
Se puede ver que esta evento está igualado al evento onReleaseOutside para que haga lo mismo. Este evento reacciona cuando soltamos el botón del Mouse con el puntero fuera del área del MC.

Por fuera de la estructura de la función vemos que hay una linea que llama a la función pasandole como parámetro el nombre de nuestro MC que era “boton_mc�. De esta forma este MC adoptara los evento para si mismo.

Para probar pueden tirar otro MC de la librería y ponerlo al lado del otro y ponerle como nombre de instancia “boton2_mc� y en el codigo debajo de todo agregar otra llamada a la función pero con el nombre de este nuevo MC.

El código quedaría así:

Actionscript:
  1. function roll(target_mc){
  2.    target_mc.onRollOver = function(){
  3.       this.gotoAndPlay("in");
  4.    }
  5.    target_mc.onRollOut = target_mc.onReleaseOutside = function(){
  6.       this.gotoAndPlay("out");
  7.    }
  8. }
  9. //
  10. roll(boton_mc);
  11. roll(boton2_mc);

De esta manera tiene dos botones con la misma programación sin repetir líneas de código.
Ahora veremos la otra forma que es mi preferida

Con animación de entrada y vuelta del puntero
Bueno este ejemplo es muy similar al anterior. Así que creamos un nuevo MovieClip llamado “boton�.
En este MC usaremos la misma animación que el anterior ejemplo pero sin animación de salida, así que nuestra línea de tiempo quedará algo así.

img4.jpg

Muy bien, tiramos el MC en el escenario. Le ponemos nombre el nombre de instancia “boton_mc� como hicimos antes y creamos la capa llamada “as� donde escribiremos el siguiente código:

Actionscript:
  1. function roll(target_mc){
  2.    target_mc.onRollOver = function(){
  3.       this.onEnterFrame = function(){
  4.          this.nextFrame();
  5.       }
  6.    }
  7.    target_mc.onRollOut = target_mc.onReleaseOutside = function(){
  8.       this.onEnterFrame = function(){
  9.          this.prevFrame();
  10.       }
  11.    }
  12. }
  13. //
  14. roll(boton_mc);

Como vemos el código es muy parecido al ejemplo anterior, lo único que cambia es lo que hace con cada evento del usuario.
En el caso de onRollOver genera un enterFrame que hace que el cabezal avance un frame. Cuando llega al final de la línea de tiempo del MC “boton_mc� se detiene.
Y en el caso del onRollOut y onReleaseOutside lo que hace es lo mismo pero en vez de pasar al siguiente frame vuelve al anterior.

Si probamos la película vemos que ya anda perfectamente. Pero hay un error que para muchos puede resultar exagerado pero para mi es fundamental.
Como vemos en el código estamos generando un enterFrame. Esto hace que flash este constantemente haciendo esa acción sin parar.

En el caso de un solo enterFrame no hay problema, ya que no va a saturar la aplicación haciendo que se vea lento todo. Pero si es una aplicación con vario botones y además usamos otros enterFrames para otras cosas ahí si se complicaría un poco.
Por eso yo siempre que pueda “matar� los enterFrames lo hago. O sea, eliminarlos de la memoria, y así dejan de hacer la acción asignada al mismo.
Para hacer esto volvemos a la línea de tiempo de nuestro botón y en el primer y ultimo KeyFrame de nuestra animación ponemos el siguiente código:

Actionscript:
  1. stop();
  2. this.onEnterFrame = null;

Con esto paramos el enterFrame liberado memoria y haciendo mas veloz y prolija nuestra aplicación.
Pueden probar también de agregar otro botón y al igual que en el otro ejemplo escribir la llamada a la función con el nombre del nuevo MC.
De más esta decir que de esta forma pueden poner toda la cantidad de botones que quieran.

Para terminar con este tutorial voy a explicarles brevemente para que caso vamos a usar cada uno de estos métodos de RollOver.

Con animación de entrada y salida: este método suelo utilizarlo cuando las animaciones de entrada y salida son distintas. Por lo tanto no me serviría hacer que vuelva la animación marcha atrás.

Con animación de entrada y vuelta del puntero: ese método suelo usarlo cuando la animación de entrada es idéntica a la de salida pero en reverso. Como los ejemplos de este tutorial.
Otra ventaja que tiene este método es que si la animaciones usadas son muy largas al sacar el Mouse de arriba del botón la animación vuelve desde el punto al que llego.
En cambio con el otro método el puntero salta a la etiqueta “out� produciendo un salto en la animación.

Bueno espero les haya servido y lo usen según sus necesidades, Saludos!

Archivos del ejemplo

10 comentarios sobre “Dos métodos para el efecto de RollOver”

  • 1

    pablo dijo:

    gracias

  • 2

    pablo dijo:

    acabo de hacerlo y solo en el swf me permite que el evento de la transformacion se de una vez, luego pasa directamente desde el primer fotograma al ultimo de cada animacion, in y out, ¿puede ser porque no hice interpolaciones de movimiento pero si puse muchos key frames uno al lado de otro para conseguir una interpolacion de forma?

  • 3

    pablo dijo:

    otra vez te agradezco y feliz navidad

  • 4

    jorge dijo:

    Muy bueno el tuto, tan bueno k voy a acer a si mis botones, lo unico esk la zona activa
    para el boton?? yo lo k e echo es otra capa en donde e puesto un rectangulo con alpha 0
    asi pongo la zona k yo kiera, y ahora para darle una accion le das “onrelease…..” al clip o donde lo pones??

  • 5

    WeeDo dijo:

    Tal cual Jorge , esa es una buena forma de definir el Hit del boton…
    Otra forma si queresmos q el hit este en otro lado o con una forma distinta a la del boton es crear un MovieClip aparte y atraves del metodo hitArea especificarle que movie tomar com hit, seria algo asi:

    boton_mc.hitArea = hit_mc;

    por lo tanto el MC hit_mc seria el Hit del boton_mc

  • 6

    Juan dijo:

    Hola
    Todo está perfecto, el “botón” se mueve y tal. Pero… ¿cómo hago para que haga click en el “botón” y me cargue una loadmovie?
    Sé cargar una loadmovie, pero con botones normales, no con clips de película que hacen las de botón, no sé si me explico. Espero que mis dudas puedan ser resueltas, porque soy un poco torpe, jeje. Gracias!

    PD1: pongo “botón” entre comillas porque realmente es un clip de película.
    PD2: Enhorabuena, tus tutoriales y todo en general son buenísimos, da gusto.
    PD3: vale, acabo de leer el comentario anterior al mío… pues aprovecho para preguntar eso de “hit” y “area”… ¿qué es?

  • 7

    WeeDo dijo:

    Hola Juan.
    Te comento rapidamente. los MovieClips tiene algo q se llama eventos, como puede ser onRollOver (cuando pasamos por ensima de ellos con el mouse), onRollOut(cuando salimos de ellos), onPress(cuando los presionamos), onRelease(cuando los soltamos) y asi algunos mas.
    Lo que tenes q hacer es escribir los sigueinte en el AS:
    boton_mc.onPress = function(){
    //tu accion, en este caso un loadMovie();
    }

    y listo, asi de simple.

    En el caso del hit, es el area sencible del botón, o sea el area en la cual reaccionan los evetos del boton.

    Espero te sirva,saludos!

  • 8

    Jorge dijo:

    Oye sabes la forma en la que explicas es realmente muy clara, hay mucha gente que tiene esete tipo de blog tuturiales, pero el tuyo es muy claro te felicito tienes una facilidad pedagogica muy buena

  • 9

    gustavo dijo:

    primero que nada te felicito por tu sitio excelente sigue asi, bueno esbribía por 2 cosas la primera es como hiciste los botones del menu de tu sitio hecho en flash quiero hacer algo asi, me gustaria hacer algo asi yo soy mas o menos nuevo en flash. lo segundo era saber tu opinion sobre Image Campus y Escuela Davinci es lo mejor que hay en argentiba?.
    bueno me despido gracias,

  • 10

    WeeDo dijo:

    Las dos instituciones son muy buenas, tuve la suerte de cursar en las dos y la verdad no tengo grandes quejas (siempre hay alguna pequeña q no viene al caso).

    ImageCampus me parece mas especializarse en algo, DaVinci en cambio ves un poco mas de todo, pero nada muy en profundidad…

    Consejo: Si queres hacer una carrera anda a DaVinci y profundiza mucho por tu cuenta y paralelo o despues especializate en lo que mas te guste en image, pero ya con una base adquirida.

    Saludos

Deje un comentario