Control de intervalos de tiempo

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

Cuando se desarrollan aplicaciones con Adobe Flash CS4 Professional, se tiene acceso a la línea de tiempo, que proporciona una progresión uniforme, fotograma a fotograma, a través de la aplicación. Sin embargo, en proyectos solo de ActionScript, hay que confiar en otros mecanismos de tiempo.

Bucles frente a temporizadores

En algunos lenguajes de programación, es necesario crear esquemas temporales propios mediante sentencias de bucle como for o do..while .

Las sentencias de bucle suelen ejecutarse con la máxima rapidez permitida en el equipo, lo que significa que la aplicación se ejecuta más rápidamente en unos equipos que en otros. Si una aplicación debe tener un intervalo de tiempo coherente, es necesario asociarla a un calendario o reloj real. Muchas aplicaciones como juegos, animaciones y controladores de tiempo real necesitan mecanismos de tictac regulares que sean coherentes de un equipo a otro.

La clase Timer de ActionScript 3.0 proporciona una solución eficaz. A través del modelo de eventos de ActionScript 3.0, la clase Timer distribuye eventos del temporizador cuando se alcanza un intervalo de tiempo especificado.

La clase Timer

La forma preferida de gestionar funciones de tiempo en ActionScript 3.0 consiste en utilizar la clase Timer (flash.utils.Timer) para distribuir eventos cuando se alcanza un intervalo.

Para iniciar un temporizador, primero es necesario crear una instancia de la clase Timer e indicarle la frecuencia con la que debe generar un evento del temporizador y la cantidad de veces que debe hacerlo antes de detenerse.

Por ejemplo, el código siguiente crea una instancia de Timer que distribuye un evento cada segundo y se prolonga durante 60 segundos:

var oneMinuteTimer:Timer = new Timer(1000, 60);

El objeto Timer distribuye un objeto TimerEvent cada vez que se alcanza el intervalo especificado. El tipo de evento de un objeto TimerEvent es timer (definido por la constante TimerEvent.TIMER ). Un objeto TimerEvent contiene las mismas propiedades que un objeto Event estándar.

Si la instancia de Timer se establece en un número fijo de intervalos, también distribuirá un evento timerComplete (definido por la constante TimerEvent.TIMER_COMPLETE ) cuando alcance el intervalo final.

A continuación se muestra una aplicación de ejemplo donde se utiliza la clase Timer:

package  
{ 
    import flash.display.Sprite; 
    import flash.events.TimerEvent; 
    import flash.utils.Timer; 
 
    public class ShortTimer extends Sprite 
    { 
        public function ShortTimer()  
        { 
            // creates a new five-second Timer 
            var minuteTimer:Timer = new Timer(1000, 5); 
             
            // designates listeners for the interval and completion events 
            minuteTimer.addEventListener(TimerEvent.TIMER, onTick); 
            minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete); 
             
            // starts the timer ticking 
            minuteTimer.start(); 
        } 
 
        public function onTick(event:TimerEvent):void  
        { 
            // displays the tick count so far 
            // The target of this event is the Timer instance itself. 
            trace("tick " + event.target.currentCount); 
        } 
 
        public function onTimerComplete(event:TimerEvent):void 
        { 
            trace("Time's Up!"); 
        } 
    } 
}

Al crear la clase ShortTimer, se crea una instancia de Timer que hará tictac una vez por segundo durante cinco segundos. Posteriormente agrega dos detectores al temporizador: uno que detecta todos los tictac y otro que detecta el evento timerComplete .

A continuación, inicia el tictac del temporizador y, a partir de ese punto, el método onTick() se ejecuta en intervalos de un segundo.

El método onTick() simplemente muestra el recuento de tictac actual. Después de cinco segundos, se ejecuta el método onTimerComplete() , que indica que se ha acabado el tiempo.

Cuando se ejecuta este ejemplo, aparecen las siguientes líneas en la consola o ventana de traza a una velocidad de una línea por segundo:

tick 1 
tick 2 
tick 3 
tick 4 
tick 5 
Time's Up!

Funciones de tiempo en el paquete flash.utils

ActionScript 3.0 incluye una serie de funciones de tiempo similares a las que estaban disponibles en ActionScript 2.0. Estas funciones se proporcionan como funciones de nivel de paquete en flash.utils y funcionan del mismo modo que en ActionScript 2.0.

Función

Descripción

clearInterval(id:uint):void

Cancela una llamada a setInterval() especificada.

clearTimeout(id:uint):void

Cancela una llamada setTimeout() especificada.

getTimer():int

Devuelve el número de milisegundos transcurridos desde que se inició Adobe® Flash® Player o Adobe® AIR™.

setInterval(closure:Function, delay:Number, ... arguments):uint

Ejecuta una función en un intervalo especificado (en milisegundos).

setTimeout(closure:Function, delay:Number, ... arguments):uint

Ejecuta una función especificada tras una demora especificada (en milisegundos).

Estas funciones se conservan en ActionScript 3.0 para permitir la compatibilidad con versiones anteriores. Adobe no recomienda utilizarlas en nuevas aplicaciones de ActionScript 3.0. En general, resulta más sencillo y eficaz utilizar la clase Timer en las aplicaciones.