Kontrollera tidsintervall

Flash Player 9 och senare, Adobe AIR 1.0 och senare

När du utvecklar program med Adobe Flash CS4 Professional har du tillgång till tidslinjen som ger en jämn talföljd, bildruta för bildruta. I rena ActionScript-projekt måste du däremot förlita dig på andra mekanismer för tidsangivelser.

Programslinga eller timer

I vissa programmeringsspråk måste du göra egna timingscheman med hjälp av slingvillkor som till exempel for eller do..while.

Programslingor exekveras generellt lika snabbt som den lokala maskinen tillåter, vilket innebär att programmet körs snabbare på vissa maskiner och långsammare på andra. Om programmet kräver ett konsekvent timingintervall behöver du koppla den till en riktig kalender eller klocka. Många program som till exempel spel, animeringar och realtidskontroller kräver vanliga, tidsdrivna mekanismer som är konsekventa från maskin till maskin.

Klassen Timer i ActionScript 3.0 ger en kraftfull lösning. Med händelsemodellen i ActionScript 3.0 skickar klassen Timer händelser varje gång ett angivet tidsintervall uppnås.

Klassen Timer

Det bästa sättet att hantera timingfunktioner i ActionScript 3.0 är att använda klassen Timer (flash.utils.Timer), som kan användas för att skicka händelser när ett intervall uppnås.

För att starta en timer skapar du först en instans av klassen Timer, där du anger hur ofta en timerhändelse ska genereras och hur många gånger detta ska ske innan den stoppas.

Med följande kodexempel skapas en Timer-instans som skickar en händelse varje sekund under 60 sekunder:

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

Objektet Timer skickar objektet TimerEvent varje gång som det givna intervallet uppnås. Händelsetypen för ett TimerEvent-objekt är timer (definieras med konstanten TimerEvent.TIMER). Objektet TimerEvent innehåller samma egenskaper som standardobjektet Event.

Om Timer-instansen anges med ett fast antal intervaller så skickas även händelsen timerComplete (anges med konstanten TimerEvent.TIMER_COMPLETE) när det slutliga intervallet uppnås.

Här följer ett litet programexempel som visar hur klassen Timer fungerar:

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

När klassen ShortTimer skapas så skapas en Timer-instans som tickar fram en gång per sekund i fem sekunder. Därefter läggs två avlyssnare till i timern: en som känner av varje tickning och en som känner av händelsen timerComplete.

Därefter startas klockningen och från och med då körs metoden onTick() med intervaller om en sekund.

Metoden onTick() visar helt enkelt aktuellt tickningsantal. Efter fem sekunder körs metoden onTimerComplete() som talar om att tiden är slut.

När du kör detta exempel bör du se följande rader på konsolen eller i statusfönstret med en hastighet på en rad i sekunden:

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

Timingfunktioner i flash.utils-paketet

ActionScript 3.0 innehåller ett antal timingfunktioner liknande de som fanns i ActionScript 2.0. Dessa funktioner finns i flash.utils-paketet och de används precis som i ActionScript 2.0.

Funktion

Beskrivning

clearInterval(id:uint):void

Avbryter ett angivet setInterval()-anrop.

clearTimeout(id:uint):void

Avbryter ett visst setTimeout()-anrop.

getTimer():int

Returnerar antalet millisekunder som har gått sedan Adobe® Flash® Player eller Adobe® AIR™ startades.

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

Kör en funktion med ett angivet intervall (i millisekunder).

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

Kör en angiven funktion efter en angiven fördröjning (i millisekunder).

Dessa klasser finns med i ActionScript 3.0 för bakåtkompatibilitet. Adobe rekommenderar inte att du använder dem i nya program i ActionScript 3.0. Generellt är det enklare och mer effektivt att använda klassen Timer i dina program.