Comunidad de diseño web y desarrollo en internet online

Timer

Citar            
MensajeEscrito el 23 Jul 2009 10:23 am
Hola,

Tengo un botón que lanza un Timer con la idea que transcurrido un cierto plazo (por ej. 60 segundos) se produzca un aviso que el tiempo disponible ha pasado y funciona sin problemas. Lo malo es que me interesa que si se vuelve a pulsar el botón antes que hayan pasado los 60 segundos el tiempo empiece de nuevo desde 0, es decir, como si fuese la primera vez que se pulsa el botón.

He probado distintas alternativas dentro de mis limitados conocimientos de AS3 pero no consigo acceder al Timer para resetearlo o anularlo.

El codigo que tengo es algo así:

Código ActionScript :

var miTemp:Boolean = false;
b1.addEventListener(MouseEvent.CLICK, eligeLetra);
function eligeLetra(event:MouseEvent):void
{
if (miTemp==false){tiempo.reset();//Aquí es donde está el problema}
else
{
var tiempo:Timer = new Timer(60000,1);
tiempo.start();
miTemp=true;
tiempo.addEventListener(TimerEvent.TIMER, aviso);
function aviso(Event:TimerEvent):void
{
trace("Han pasado los 60 segundos");
miTemp=false;
}
}
}


Es probable que el planteamiento no sea el correcto y haya un método más sencillo para hacer esto, o que haya una forma de acceder al Timer y yo no soy capaz por desconocimiento de alguna cosa. Tanto en un caso como en otro agradezco cualquier ayuda y si me podeis indicar alguna pista.

No quiero molestaros pidiendo que me lo solucioneis pero si me dais alguna idea del camino que debo investigar estaría MUY AGRADECIDO.

Un saludo.

Por marcnexus

13 de clabLevel



 

Sevilla, España.

firefox
Citar            
MensajeEscrito el 23 Jul 2009 11:34 am
Como el Timer lo has definido DENTRO de la función "eligeLetra", te crea un timer cada vez que pulsas una letra -y no se para de ningún modo- Así que, lo que tenemos que hacer es sacar TODO lo del Timer FUERA.
En la función "eligeLetra" sólo tienes que poner el "tiempo.start();"

Código ActionScript :

var tiempo:Timer = new Timer(60000,1); 
//también el addEventListener
tiempo.addEventListener(TimerEvent.TIMER, aviso);
//igualmente la función "aviso"
function aviso(Event:TimerEvent):void 
{ 
   ....
}

//en tu función eligeLetra
function eligeLetra(event:MouseEvent):void 
{ 
    //para comenzar a contar el tiempo simplemente
    tiempo.start()
    //o según la condición que sea tiempo.reset()
}

NOTA:No es la primera vez que vemos definiciones de funciones DENTRO de funciones. NO debemos hacerlo: las funciones se definen una ÚNICA VEZ, una función sirve para realizar una serie de instrucciones (añadir eventos, quitarlos, hacer comprobaciones..., pero NO para definir funciones.

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Jul 2009 02:23 pm
Muchas gracias, iba a poner eso mismo que me has respondido porque acababa de descubrir el error. Estaba tan cegado con buscar problemas donde no los había que he pasado por algo lo más esencial.

Ojalá lo hubiese preguntado antes porque no me puedo creer las horas que he pasado dandole vueltas a semejante torpeza por mi parte. He aprendido la lección y por si había alguna duda la excelente explicación de Eliseo2 es magistral.

Muy agradecido a todos y a Eliseo2 en particular.

Por marcnexus

13 de clabLevel



 

Sevilla, España.

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.