Controllo degli intervalli di tempo

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Quando sviluppate applicazioni mediante Adobe Flash CS4 Professional, potete accedere alla linea temporale, che fornisce una progressione fotogramma per fotogramma dell'intera applicazione. In progetti esclusivi di ActionScript, tuttavia, dovete affidarvi ad altri meccanismi di gestione temporale.

Cicli e timer

In alcuni linguaggi di programmazione, è necessario applicare schemi di gestione del tempo personalizzati mediante istruzioni cicliche quali for o do..while.

Le istruzioni cicliche vengono generalmente eseguite alla massima velocità consentita dal sistema, di conseguenza, l'applicazione risulterà più veloce su alcune macchine rispetto ad altre. Se l'applicazione che state eseguendo necessita di un intervallo di tempo regolare, dovete collegarla a un calendario o a un orologio. Molte applicazioni, quali giochi, animazioni e controller in tempo reale, richiedono meccanismi di scansione temporale regolari e omogenei tra un computer e l'altro.

La classe Timer di ActionScript 3.0 offre una soluzione efficace al problema. Grazie al modello eventi di ActionScript 3.0, la classe Timer è in grado di inviare eventi timer ogni volta che viene raggiunto un intervallo di tempo specificato.

Classe Timer

La modalità preferenziale di gestione delle funzioni temporali in ActionScript 3.0 è mediante la classe Timer (flash.utils.Timer), che consente di inviare eventi al trascorrere di intervalli di tempo specificati.

Per avviare un timer, è necessario creare in primo luogo un'istanza della classe Timer, quindi impostare la frequenza di creazione di un evento timer e la quantità di eventi da generare prima di arrestarsi.

Il codice seguente consente, ad esempio, di creare un'istanza Timer che invia un evento ogni secondo e continua per 60 secondi:

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

L'oggetto Timer invia un oggetto TimerEvent ogni volta che viene raggiunto l'intervallo di tempo specificato. Un tipo di evento dell'oggetto TimerEvent è timer (definito dalla costante TimerEvent.TIMER ). Un oggetto TimerEvent contiene le stesse proprietà dell'oggetto standard Event.

Se l'istanza Timer viene impostata per un determinato numero di intervalli, essa invierà anche un evento timerComplete (definito dalla costante TimerEvent.TIMER_COMPLETE ) quando viene raggiunto l'intervallo finale.

Di seguito è riportata una breve applicazione di esempio che illustra il funzionamento della classe 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!"); 
        } 
    } 
}

Quando viene creata la classe ShortTimer, viene creata anche un'istanza Timer che esegue un controllo una volta al secondo per cinque secondi. Quindi vengono aggiunti due listener al timer: uno che intercetta ogni conteggio di controllo e l'altro che resta in attesa dell'evento timerComplete .

Viene quindi avviato il conteggio del timer e, da quel momento in poi, il metodo onTick() viene eseguito a intervalli di un secondo.

Il metodo onTick() visualizza semplicemente il conteggio temporale corrente. Dopo cinque secondi, viene eseguito il metodo onTimerComplete() , che avverte che il tempo è scaduto.

Nell'eseguire questo codice di esempio, sulla console o sulla finestra di traccia dovrebbero apparire le seguenti righe alla velocità di una riga al secondo:

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

Funzioni temporali del pacchetto flash.utils

ActionScript 3.0 contiene varie funzioni per la gestione del tempo simili a quelle disponibili in ActionScript 2.0. Tali funzioni vengono fornite a livello di pacchetto in flash.utils e possono essere utilizzate esattamente come in ActionScript 2.0.

Function

Descrizione

clearInterval(id:uint):void

Annulla una chiamata setInterval() specifica.

clearTimeout(id:uint):void

Annulla una chiamata setTimeout() specifica.

getTimer():int

Restituisce il numero di millesimi di secondo trascorsi dall'inizializzazione di Adobe® Flash® Player o Adobe® AIR™.

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

Esegue una funzione a un intervallo specificato (in millisecondi).

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

Esegue una funzione specifica dopo un ritardo prestabilito (in millisecondi).

Queste funzioni sono incluse in ActionScript 3.0 al fine di assicurare la compatibilità con le versioni precedenti. Adobe sconsiglia di utilizzarle nelle nuove applicazioni ActionScript 3.0. In generale, l'uso della classe Timer nelle applicazioni risulta più facile e più efficace.