Hola amigo
Rafeo, mira, estube analizando el primer codigo que pusiste:
Código :
var mouseListener:Object=new Object();
mouseListener.onMouseMove=function(){
var movimientoIntr:Number=setInterval(hayMovimientoMouse,20);
}
Mouse.addListener(mouseListener);
function hayMovimientoMouse():Void{
tiempoFullscreen++;
if(tiempoFullscreen<3000){
bFullscreen._visible=true;
trace(tiempoFullscreen);
}
else{
bFullscreen._visible=false;
tiempoFullscreen=0;
trace(0);
//este clearInterval no me está funcionando
clearInterval(movimientoIntr);
break;
}
}
El principal problema de por que tu
clearInterval no funciona es porque definiste el id
movimientoIntr dentro de la funcion que se invoca al mover el mouse, por lo que esta variable seria local de esta funcion, puedes comprobar esto traceandola debajo donde la utilizas para el
clearInterval, una solucion seria definirla fuera u otra podria ser pasarla como parametro del
setInterval.
Ahora, solucionado esto, el resto deberia funcionar (solo que no a los 3s como quieres, porque estas llamando la funcion
hayMovimientoMouse cada 20 milisegundos e incrementas entonces a
tiempoFullscreen en 1, esto quiere decir que pasados 3 segundos
tiempoFullscreen valdra 150 y no 3000 como deberia ser, esto quiere decir que no seria hasta pasado 1 minuto completo que haria lo que deberia hacer a los 3 segundos), yo probe esto y no funciono, pero al poner un trace dentro de la funcion que se llama al mover el mouse, me di cuenta de que no se porque al ejecutar la pelicula (almenos en el flash, no la probe en el flashplayer) esta funcion se invoca dos veces seguidas, y por supuesto que el id del
setInterval que queda almacenado en la variable
movimientoIntr es el de la segunda llamada, el cual si se detiene al llamar debajo a
clearInterval (despues de corregido lo de la definicion del id) solo que la primera llamada es quien se queda activa y no se puede eliminar ya que no conoces el id, esto se soluciona llamando a
clearInterval justo antes de llamar a
setInterval en la funcion que se invoca al mover el mouse, para asi estar seguro de que se detiene el intervalo llamado anteriormente antes de crear uno nuevo.
Aqui te dejo un ejemplito que hice a partir del codigo que tu publicaste
Código :
var mouseListener:Object = new Object();
var movimientoIntr:Number = new Number(); //definir la var para almacenar el id fuera, para que sea visible a las dos funciones.
mouseListener.onMouseMove = function() {
trace("movement"); //es para que veas cuantas veces se llama a esta funcion (no se porque 2 veces al compilar)
clearInterval(movimientoIntr); //solucion a esa doble llamada inicial
bFullscreen._visible = true; //esto es para visualizar el boton otra vez al mover el mouse nuevamente
movimientoIntr = setInterval(hayMovimientoMouse, 3000); //llamada a la funcion "hayMovimientoMouse" cada 3 segundos.
};
Mouse.addListener(mouseListener);
//
function hayMovimientoMouse():Void {
//si se ejecuta esta funcion es porque han pasado 3 segundos sin mover el mouse, ya que de moverlo antes de los 3 segundos se eliminaria el intervalo y se iniciaria uno nuevo al llamar la funcion de arriba.
trace("3 seconds without moving the mouse");
bFullscreen._visible = false;
clearInterval(movimientoIntr);
} Espero haberte servido de ayuda.
Saludos.