Controllo degli intervalli di tempo

Quando si sviluppano applicazioni mediante Adobe Flash CS3 Professional, è possibile accedere alla linea temporale, che fornisce una progressione fotogramma per fotogramma dell'intera applicazione. In progetti esclusivi di ActionScript, tuttavia, è necessario affidarsi ad altri meccanismi di gestione temporale.

Sezioni

Cicli e timer
Classe Timer
Funzioni temporali del pacchetto flash.utils

Cicli e timer

In alcuni linguaggi di programmazione, è necessario applicare schemi di gestione del tempo propri mediante istruzioni di 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 si sta eseguendo necessita di un intervallo di tempo regolare, è necessario collegarlo 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.

Ad esempio, il codice seguente consente 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.

Segue 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() 
        {
            // Crea un nuovo Timer di cinque secondi
            var minuteTimer:Timer = new Timer(1000, 5);
            
            // Designa listener per gli eventi intervallo e di completamento
            minuteTimer.addEventListener(TimerEvent.TIMER, onTick);
            minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
            
            // Avvia il conteggio del timer
            minuteTimer.start();
        }

        public function onTick(event:TimerEvent):void 
        {
            // Visualizza il conteggio
            // L'obbiettivo di questo evento è l'istanza Timer stessa.
            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.

Quindi, viene 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.

Quando si esegue questo 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.

Funzione

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.

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 utilizzare nelle nuove applicazioni di ActionScript 3.0. In generale, l'uso della classe Timer nelle applicazioni risulta più facile e più efficace.


Flash CS3

 

Inviami un messaggio e-mail quando vengono aggiunti dei commenti a questa | Rapporto sui commenti

Pagina corrente: http://livedocs.adobe.com/flash/9.0_it/main/00000074.html