Dos métodos para el efecto de RollOver
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.
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ó).

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Ã.

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â€?.

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Ã:
-
function roll(target_mc){
-
target_mc.onRollOver = function(){
-
this.gotoAndPlay("in");
-
}
-
target_mc.onRollOut = target_mc.onReleaseOutside = function(){
-
this.gotoAndPlay("out");
-
}
-
}
-
//
-
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Ã:
-
function roll(target_mc){
-
target_mc.onRollOver = function(){
-
this.gotoAndPlay("in");
-
}
-
target_mc.onRollOut = target_mc.onReleaseOutside = function(){
-
this.gotoAndPlay("out");
-
}
-
}
-
//
-
roll(boton_mc);
-
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Ã.

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:
-
function roll(target_mc){
-
target_mc.onRollOver = function(){
-
this.onEnterFrame = function(){
-
this.nextFrame();
-
}
-
}
-
target_mc.onRollOut = target_mc.onReleaseOutside = function(){
-
this.onEnterFrame = function(){
-
this.prevFrame();
-
}
-
}
-
}
-
//
-
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:
-
stop();
-
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!


Escrito por: WeeDo en 




pablo dijo:
pablo dijo:
pablo dijo:
jorge dijo:
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??
WeeDo dijo:
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
Juan dijo:
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?
WeeDo dijo:
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!
Jorge dijo:
gustavo dijo:
bueno me despido gracias,
WeeDo dijo:
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