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 鈥渂oton鈥 (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茅 鈥渁s鈥 hay 5 KeyFrames muy simples. Los que tiene la marca de la 鈥渁鈥 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 鈥渂oton_mc鈥.

En la l铆nea de tiempo creamos una nueva capa a la que llamaremos 鈥渁s鈥, por ActionScript como hicimos dentro del MC del bot贸n.
En esa capa escribiremos nuestro c贸digo que dir谩 algo as铆:
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 鈥渞oll鈥, 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 鈥渋n鈥.
El segundo evento es onRollOut, que hace que la l铆nea de tiempo del mismo MC haga Play desde 鈥渙ut鈥.
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 鈥渂oton_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 鈥渂oton2_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铆:
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 鈥渂oton鈥.
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 鈥渂oton_mc鈥 como hicimos antes y creamos la capa llamada 鈥渁s鈥 donde escribiremos el siguiente c贸digo:
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 鈥渂oton_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 鈥渕atar鈥 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:
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 鈥渙ut鈥 produciendo un salto en la animaci贸n.
Bueno espero les haya servido y lo usen seg煤n sus necesidades, Saludos!


el 17 de Noviembre del 2006 a las 17:37
gracias
el 17 de Noviembre del 2006 a las 18:24
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?
el 17 de Noviembre del 2006 a las 18:24
otra vez te agradezco y feliz navidad
el 17 de Noviembre del 2006 a las 13:37
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??
el 17 de Noviembre del 2006 a las 14:01
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
el 17 de Noviembre del 2006 a las 16:16
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?
el 17 de Noviembre del 2006 a las 9:23
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!
el 17 de Noviembre del 2006 a las 12:19
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
el 17 de Noviembre del 2006 a las 18:29
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,
el 17 de Noviembre del 2006 a las 11:25
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