Foros del Web » Creando para Internet » Flash y Actionscript »

RollOut que no funciona

Estas en el tema de RollOut que no funciona en el foro de Flash y Actionscript en Foros del Web. Tengo un botón que al hacerle rollOver crece y al hacer rollOut vuelve a su tamaño original. Todo esto lo hago desde la línea de ...
  #1 (permalink)  
Antiguo 27/02/2005, 20:36
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
RollOut que no funciona

Tengo un botón que al hacerle rollOver crece y al hacer rollOut vuelve a su tamaño original.
Todo esto lo hago desde la línea de tiempo:
En el frame 1 está el botón a tamaño normal. Y tiene la acción stop().
En el frame 2 empieza una interpolación hasta el frame 10 en donde el botón está grande.
En el frame 11 está el botón grande. Y tiene la acción stop();
En el frame 12 empieza una interpolación hasta el frame 20 en donde el botón está en su tamaño original.
En el frame 21 está el botón en su tamaño original. Y tiene la acción gotoAndStop(1);

La línea de tiempo la manejo así:
on(rollOver){gotoAndPlay(2);}
on(rollOut){gotoAndPlay(12);}

En los cinco frames claves que mencioné arriba (1,2,10,11 y 21) están definidas esas acciones para el botón.

Todo funciona correctamente, excepto que cuando se pasa el mouse rápidamente se ejecuta la acción para "rollOver", pero no la de "rollOut".

La conclusión a la que he llegado es que mientras la línea de tiempo está en la interpolación (entre el frame 2 y el 10) el botón pierde sus manejadores de eventos. O sea que el "rollOut" no hace nada si se saca el puntero en ese momento.

¿Existe alguna alternativa para eso? Es que si se pasa el mouse rápidamente el botón crece y se queda grande.

Espero haberme explicado bien.

Saludos
  #2 (permalink)  
Antiguo 27/02/2005, 20:44
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Ah!
También se me ocurrió poner movieclips rodeando al botón.
Esos mc's tendrían el evento rollOver que enviarían la línea de tiempo al frame 1.
Esto resuelve más o menos lo anterior.

El problema es que pierdo el efecto de "achicar" y si lo mando al frame 12 (donde empieza a achicarse) entonces podría ahicar un botón que nunca creció si el usuario pasa el mouse por este mc sin haberlo pasado antes por el botón.
Tal vez pueda solucionar esto con una variable que haga de flag.

El otro problema es que al asignarle manejadores como on(rollOver) al movieclip, éste actúa como botón y se ve la "manito" en lugar de la flecha...
¿Existe alguna manera de que aunque el movieclip tenga asignado el manejador on(rollOver) no den ganas de hacerle clic :)?

Aunque preferiría algo más relacionado con el primer post y no tener que recurrir a estos mc's.

Saludos

Última edición por jpinedo; 27/02/2005 a las 20:47
  #3 (permalink)  
Antiguo 28/02/2005, 08:49
Avatar de budoukai  
Fecha de Ingreso: febrero-2005
Ubicación: es feito
Mensajes: 257
Antigüedad: 19 años, 1 mes
Puntos: 0
el mc que esta externo al objeto que crece y se achica, que hace funcion de roll out, debe estar solo en un frame, exactamente en el 12. No desde el frame 1 por q no le dara tiempo a crecer.
  #4 (permalink)  
Antiguo 28/02/2005, 11:11
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Claro, pero el problema no es en el frame 12 porque ahí el botón sí cumple bien con su propio rollOut.
El problema es entre el frame 2 y el 10. (mientras el botón crece).
Si el usuario hace rollOut al botón cuando la línea de tiempo está entre esos frames, no se ejecutan las acciones... El botón tiene acciones en el frame 2 y en el frame 10, pero en los frames intermedios pierde el manejo de eventos por estar en una interpolación.

Además todo lo que he descrito anteriormente no está en la línea de tiempo principal, sino dentro de un mc (mc_boton).

Si lo hago con el mc externo, debería ejecutar algo si el botón está creciendo (o está grande) y otra (nada) si el botón está en su tamaño original.
He pensado lo siguiente:
En el frame 2 activar la variable:
_root.creciendo = true;
En el frame 11 y en el resto de frames clave (incluyendo el frame 1))
_root.creciendo = false;

De esa manera al manejador de eventos del mc externo se le pone algo como lo siguiente:
on(rollOver){
if(_root.creciendo){// Si está entre los frames 2 y 10 (que es donde no funciona)
_root.mc_boton.gotoAndPlay(12); // ir al frame 12 (achicar)
}
}

De esa manera, el mc externo hará su trabajo sólo mientras la línea de tiempo del mc_boton está entre los frames 2 y 10 que es donde no funciona el handler propio del botón.
Aún no lo pruebo, pero supongo que con eso se solucionará.

Lo que sí quisiera resolver es el tema de la "manito" sobre el mc. Preferiría que siga como flechita.

Saludos

Última edición por jpinedo; 28/02/2005 a las 11:15
  #5 (permalink)  
Antiguo 28/02/2005, 23:31
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Alguna opinión u otra manera mejor de hacerlo?
Alguna idea con lo de la "manito"?

saludos
  #6 (permalink)  
Antiguo 01/03/2005, 14:33
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Para lo de la manito ya encontré solución:
on(rollOver){
InstanciaBoton.useHandCursor = false;
}
O sea que ya está todo resuelto.

Saludos
  #7 (permalink)  
Antiguo 01/03/2005, 22:10
Avatar de rod524  
Fecha de Ingreso: agosto-2004
Mensajes: 517
Antigüedad: 19 años, 8 meses
Puntos: 0
Cuando son varios botones suele pasar lo que comentas, por los tiempos que toma evaluar la condición de cada botón, en vez de confiar en los rollover y rollout evalúa la posición del puntero del mouse desde el _root, o crea un clip vacío con esa función en (0,0).

De acuerdo a su posición haz que se ejecuten las acciones.

Saludos.
  #8 (permalink)  
Antiguo 02/03/2005, 02:59
Avatar de pulento  
Fecha de Ingreso: noviembre-2002
Ubicación: En un pequeño, helado, obscuro reino... llamado Dinamarca.
Mensajes: 1.852
Antigüedad: 21 años, 5 meses
Puntos: 1
Cuando haces una interpolacion.. usando las herramienta de flash.. la cantidad de calculos ke fash hace son mayores ke si lo haces usando Action script.. ya ke flash reconoce la cantidad de tiempo ke la interpolacion debe tomar para terminar .. y ese dato lo concerva y pretende terminar el trabajo ante de empezar otro.

Lo mas atinado es trabajar con las propiedades.. en esta caso _width y height o _xscale y _yscale. Y la respuesta de flash sera mas limpia y mas rapida.

Salu2
__________________
http://www.flotdesign.dk/
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:32.