Home » Básico »Flash »Trucos » Currently Reading:

Controlar inactividad en una pelicula

noviembre 11, 2006 Básico, Flash, Trucos 9 Comments
Controlar inactividad en una pelicula

Este sencllo código nos puede servir para detectar un tiempo de inactividad por parte del usuario dentro de nuestra pelicula. Para por ejemplo, si el usuario está más de un minuto sin tocar el mouse, la pelicula salte directamente a un fotograma con una animación, y cuando el usuario vuelva a tocar el mouse la pelicula vuelva a su estado normal. Algo como un salvapantallas.

 

Primero de todo crearemos una pelicula flash con dos fotogramas. En el primero colocaremos un MovieClip que contendrá toda la pelicula, y en el segundo colocaremos otro MovieClip que contendrá la animación de salvapantallas.

 

En las acciones del primer fotograma colocaremos el código que controlará si hay actividad por parte del usuario, en el momento en el que pase un cierto tiempo en el que no la hay, mandará la pelicula al segundo fotograma.

  1. var posicionMouse:Number = _xmouse + _ymouse;
  2. intervalo = setInterval(this, "controlaPosicion", 2000);
  3. stop();

La variable posicionMouse guardará el valor de la posición del mouse en pantalla, y crearemos un intervalo que cada 2 segundos controle dicha posición.

  1. function controlaPosicion():Void
  2. {
  3.     if (posicionMouse != _xmouse + _ymouse) {
  4.     }
  5. }

Esta función compara el valor de la variable posicionMouse (guardada hace 2 segundos) con el valor actual del mouse, si el valor es diferente con lo quiere decir el el usuario está activo, entonces ejecutaremos las siguientes acciones:

  1. clearInterval(intervalo2);
  2. intervalo2 = setInterval(this, "salvapantallas", 18000);
  3. gotoAndStop(1);

Creamos un segundo intervalo, en este caso de 18 segundos (o el tiempo que queramos para que salte nuestro salvapantallas). Y colocamos un gotoAndStop que mantenga la pelicula en el primer fotograma.

 

¿Por qué eliminamos la referencia al intervalo antes de crearlo? porque de esta manera reseteamos el intervalo cada vez que ejecutamos la acción. Es decir: si cada 2 segundos comparamos los valores del mouse y son diferentes, reiniciamos el segundo intervalo haciendo que vuelva a empezar la cuenta desde cero con lo que nunca llegará a los 18 segundos y no ejecutará la acción “salvapantallas”, En cambio en cuanto los valores del mouse coincidan por que no ha habido movimiento del ratón por parte del usuario este reinicio del intervalo no se ejecutará con lo que este si que llegará a los 18 segundos ejecutando la acción “salvapantallas”.

 

Como última acción dentro de esta función colocaremos fuera del condicional, para que se ejecute siempre cada 2 segundos, una línea de código que nos actualice la variable de la posición del mouse.

  1. posicionMouse = _xmouse + _ymouse;

La acción “salvapantallas” lo que hará es enviar la pelicula al segundo fotograma.

  1. function salvapantallas():Void
  2. {
  3. gotoAndStop(2);
  4. }

Aun estando en el segundo fotograma el intervalo que comprueba el movimiento del mouse continua ejecutandose cada 2 segundos, con lo que al primer movimiento volverá a colocar la pelicula en el primer fotograma.

 

Este sería el código completo, que hiría en el primer fotograma:

  1. function controlaPosicion():Void
  2. {
  3.     if (posicionMouse != _xmouse + _ymouse) {
  4.         clearInterval(intervalo2);
  5.         intervalo2 = setInterval(this, "salvapantallas", 18000);
  6.         gotoAndStop(1);
  7.     }
  8.     posicionMouse = _xmouse + _ymouse;
  9. }
  10. //----------------------------------
  11. function salvapantallas():Void
  12. {
  13.     gotoAndStop(2);
  14. }
  15. //----------------------------
  16. var posicionMouse:Number = _xmouse + _ymouse;
  17. intervalo = setInterval(this, "controlaPosicion", 2000);
  18. stop();

Compártelo:

Controlar inactividad en una pelicula
Visto 9.502 veces

Currently there are "9 comments" on this Article:

  1. zah dice:

    Pues muy buena idea, seguro que le puede ser útil a más de uno.
    Ahora: onMouseMove(){crearInterval();setInterval()} y a correr.
    Saludos.

  2. admin dice:

    Así es, pero colocando esa función dentro de un onMouseMove se ejecutaría con excesiva frecuencia. Por eso creo que es mejor hacerlo con otro setInterval cada 2 segundos, (o incluso con menos frecuencia, siempre que sean menos segundos que en el otro intervalo)

  3. zah dice:

    Muy cierto…

    Otra cosa que se puede hacer es meter esto en una función y dispararlo también con un onKeyDown.

    clearInterval(intervalo2);
    intervalo2 = setInterval(this, “salvapantallas”, 18000);
    gotoAndStop(1);

  4. andre dice:

    para los que estamos entrando al mundo flash sería bueno que incluyas los ejemplos de qué función tienen estos códigos, que para muchos es lenguaje en chino…

  5. brujitama dice:

    me habeis salvado la vida. Muchas gracias!!!!!
    Gracias por hacer posible paginas tan utiles como la vuestra.
    seguid ahí

    😀

  6. omare dice:

    garpa bien vistesssssssssss

  7. carolina dice:

    Después de estar muchas horas buscando el scripr para un salvapantallas en flah, crei que este era, pero me pasa que incluso habiendo actividad del mouse se va igual al segundo fotograma.
    Alguien podria dar alguna ayuda???

    Gracias de antemano!

  8. carolina dice:

    me funcionó así:

    //—–creamos el movieClipControl para testear la inactividad
    _root.createEmptyMovieClip(“control”,600);
    //—-colocar el contador en cero
    control.counter = 0;
    //—-este numero dividido entre el framerate de la pelicula son los segundos
    //—-inactivos
    control.tiempoinactivo = 300;
    //
    control.onEnterFrame = function() {
    control.counter++;
    if (control.counter == control.tiempoinactivo) {
    trace(“inactivo”);

    gotoAndStop(2);
    //—-aqui pones las acciones que se ejecutaran cuando llegue
    //—-al tiempo de inactividad especificado
    }
    };
    control.onMouseMove = function() {
    control.counter = 0;

    //En el frame 2 sólo un stop(); y un boton que haga que se vaya al frame 1

  9. admin dice:

    @carolina:
    Sí, así rte debería funcionar, pero siempre es mejor utilizar un setInterval o la clase Timer en lugar de un enter_frame.
    Además es inecesario crear un MovieClip vacio para asignar el enter_frame.

Comment on this Article:








Twitter: zguillez

AdvertisementAdvertisementAdvertisementAdvertisement

Recibe las novedades por email



Map

Ranking

Codigoactionscript.org: 4.65 sobre 5 (106 valoraciones)

twitter-widget.com