Tijdintervallen bepalen

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Wanneer u toepassingen ontwikkelt met Adobe Flash CS4 Professional, hebt u toegang tot de tijdlijn, een functie voor een evenwichtige, framegewijze voortgang door uw toepassing. In pure ActionScript-projecten moet u andere timingmechanismen gebruiken.

Lussen versus timers

In sommige programmeertalen moet u uw eigen timingschema’s maken met lusinstructies als for of do..while.

Lusinstructies worden doorgaans zo snel uitgevoerd als mogelijk is op de lokale machine, wat betekent dat de toepassing niet op elke machine even snel wordt uitgevoerd. Als voor uw toepassing een regelmatig timinginterval vereist is, moet u deze koppelen aan een actuele kalender of kloktijd. Veel toepassingen, zoals games, animaties en realtime controllers, vereisen een regelmatig, op de tijd gebaseerd tikmechanisme dat op elke machine consistent is.

De ActionScript 3.0-klasse Timer biedt een krachtige oplossing. Met het gebeurtenismodel van ActionScript 3.0 verzendt de klasse Timer timergebeurtenissen wanneer er een opgegeven tijdinterval wordt bereikt.

De klasse Timer

Voor het verwerken van timingfuncties in ActionScript 3.0 kunt u het beste de klasse Timer (flash.utils.Timer) gebruiken die kan worden gebruikt om gebeurtenissen te verzenden wanneer een interval wordt bereikt.

Als u een timer wilt starten, maakt u eerst een instantie van de klasse Timer en geeft u op hoe vaak deze een timergebeurtenis moet genereren en na hoeveel keren dit moet stoppen.

Met de volgende code wordt bijvoorbeeld een instantie Timer gemaakt die gedurende 60 seconden elke seconde een gebeurtenis verzendt:

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

Elke keer dat het opgegeven interval wordt bereikt, verzendt het object Timer een object TimerEvent. Het gebeurtenistype van het object TimerEvent is timer (gedefinieerd door de constante TimerEvent.TIMER). Een object TimerEvent bevat dezelfde eigenschappen als een standaardobject Event.

Als de instantie Timer op een vast aantal intervallen is ingesteld, wordt ook de gebeurtenis timerComplete (gedefinieerd door de constante TimerEvent.TIMER_COMPLETE) verzonden wanneer het laatste interval wordt bereikt.

Hier volgt een kleine voorbeeldtoepassing waarin de klasse Timer wordt gebruikt:

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!"); 
        } 
    } 
}

Wanneer de klasse ShortTimer is gemaakt, maakt deze een instantie Timer die gedurende vijf seconden één keer per seconde tikt. Vervolgens worden twee listeners aan de timer toegevoegd: een listener die naar elke tik luistert en een listener die naar de gebeurtenis timerComplete luistert.

Vervolgens begint de timer te tikken en vanaf dat moment wordt de methode onTick() met een interval van één seconde uitgevoerd.

Met de methode onTick() wordt alleen de telling van het aantal tikken weergegeven. Na vijf seconden wordt de methode onTimerComplete() uitgevoerd en wordt u verteld dat de tijd om is.

Wanneer u dit voorbeeld uitvoert, moeten de volgende regels met een snelheid van één regel per seconde worden weergegeven in uw console of deelvenster Uitvoer:

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

Timingfuncties in het pakket flash.utils

ActionScript 3.0 bevat diverse timingfuncties die vergelijkbaar zijn met de timingfuncties in ActionScript 2.0. Dit zijn functies op pakketniveau in het pakket flash.utils, die op dezelfde manier werken als in ActionScript 2.0.

Functie

Beschrijving

clearInterval(id:uint):void

Hiermee wordt een opgegeven aanroep van setInterval() geannuleerd.

clearTimeout(id:uint):void

Hiermee wordt een opgegeven aanroep van setTimeout() geannuleerd.

getTimer():int

Retourneert het aantal verstreken milliseconden vanaf het moment dat Adobe® Flash® Player of Adobe® AIR™ is gestart.

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

Hiermee wordt een functie volgens een opgegeven interval (in milliseconden) uitgevoerd.

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

Hiermee wordt een functie na een opgegeven vertraging (in milliseconden) uitgevoerd.

Deze functies zijn inbegrepen in ActionScript 3.0 voor achterwaartse compatibiliteit. Adobe raadt u niet aan deze functies te gebruiken in nieuwe ActionScript 3.0-toepassingen. Over het algemeen is het gemakkelijker en efficiënter om de klasse Timer in uw toepassingen te gebruiken.