Steuern von Zeitintervallen

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Beim Entwickeln von Anwendungen mit Adobe Flash CS4 Professional können Sie auf die Zeitleiste zugreifen, mit der die entsprechende Anwendung gleichmäßig Bild für Bild durchlaufen werden kann. Bei reinen ActionScript-Projekten müssen Sie jedoch andere Verfahren zur zeitlichen Abstimmung verwenden.

Schleifen und Timer im Vergleich

Bei einigen Programmiersprachen müssen Sie Zeitintervalle mit Schleifenanweisungen wie for oder do..while selbst erstellen.

Schleifenanweisungen werden in der Regel entsprechend der Geschwindigkeit des jeweiligen Computers durchgeführt, d. h. die Anwendung wird auf einigen Computern schneller ausgeführt als auf anderen. Wenn für eine Anweisung ein konstantes Zeitintervall erforderlich ist, müssen Sie eine Verknüpfung mit einem Kalenderdatum oder einer Uhrzeit erstellen. Bei vielen Anwendungen, z. B. Spielen, Animationen und Echtzeitcontrollern, werden einheitliche, die Zeit messende Timer benötigt, die auch auf unterschiedlichen Computern zu gleichen Ergebnissen kommen.

Die Timer-Klasse in ActionScript 3.0 bietet hierfür eine leistungsstarke Lösung. Unter Verwendung des Ereignismodells von ActionScript 3.0 können mit der Timer-Klasse Timer-Ereignisse ausgelöst werden, wenn ein bestimmtes Zeitintervall erreicht wird.

Timer-Klasse

Verwendung der Timer-Klasse (flash.utils.Timer) ist das empfohlene Verfahren zum Einsatz von Timerfunktionen in ActionScript 3.0. Mit dieser Klasse können Ereignisse ausgelöst werden, wenn Zeitintervalle erreicht werden.

Zum Starten eines Timers müssen Sie zunächst eine Instanz der Timer-Klasse erstellen und dann festlegen, wie oft ein Timer-Ereignis ausgelöst wird und nach wie vielen Malen es gestoppt wird.

Mit dem folgenden Code wird beispielsweise eine Timer-Instanz erstellt, mit der über einen Zeitraum von 60 Sekunden jede Sekunde ein Ereignis ausgelöst wird:

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

Das Timer-Objekt löst jedes Mal ein TimerEvent-Objekt aus, wenn das angegebene Intervall erreicht ist. Der Ereignistyp eines TimerEvent-Objekts lautet timer (definiert durch die TimerEvent.TIMER -Konstante). Ein TimerEvent-Objekt enthält die gleichen Eigenschaften wie ein Event-Standardobjekt.

Wenn für die Timer-Instanz eine feste Anzahl von Intervallen festgelegt ist, wird auch ein timerComplete -Ereignis ausgelöst (definiert durch die TimerEvent.TIMER_COMPLETE-Konstante ), wenn das letzte Intervall erreicht wird.

Es folgt eine kleine Beispielanwendung mit der Timer-Klasse:

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

Beim Erstellen der ShortTimer-Klasse wird eine Timer-Instanz erstellt, die über einen Zeitraum von 5 Sekunden einmal pro Sekunde ein Tick-Ereignis sendet. Dann werden dem Timer zwei Listener hinzugefügt: einer, der auf die einzelnen Ticks wartet, und einer, der auf das timerComplete -Ereignis wartet.

Anschließend wird der Timer gestartet. Ab diesem Moment wird die onTick() -Methode in Intervallen von einer Sekunde ausgeführt.

Über die onTick() -Methode wird die aktuelle Anzahl der Tick-Ereignisse angezeigt. Wenn fünf Sekunden vergangen sind, wird die onTimerComplete() -Methode ausgeführt. Dadurch wird angegeben, dass das Zeitintervall abgelaufen ist.

Beim Ausführen dieser Beispielanwendung werden die folgenden Zeilen in der Konsole oder im Bedienfeld „Ausgabe“ angezeigt – jeweils eine Zeile pro Sekunde:

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

Timerfunktionen im flash.utils-Paket

ActionScript 3.0 enthält eine Reihe von Timerfunktionen ähnlich denen in ActionScript 2.0. Diese Funktionen werden auf Paketebene im flash.utils-Paket bereitgestellt und funktionieren genauso wie in ActionScript 2.0.

Funktion

Beschreibung

clearInterval(id:uint):void

Bricht den angegebenen setInterval() -Aufruf ab

clearTimeout(id:uint):void

Bricht den angegebenen setTimeout() -Aufruf ab.

getTimer():int

Gibt die Anzahl der Millisekunden zurück, die seit dem Initialisieren von Adobe ® Flash® Player bzw. Adobe® AIR™ vergangen sind

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

Führt eine Funktion in bestimmten Intervallen aus (Angabe in Millisekunden)

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

Führt eine bestimmte Funktion nach der angegebenen Verzögerung aus (Angabe in Millisekunden).

Diese Funktionen wurden in ActionScript 3.0 aus Gründen der Abwärtskompatibilität beibehalten. Von der Verwendung dieser Funktionen in neuen ActionScript 3.0-Anwendungen wird abgeraten. In der Regel ist es einfacher und effizienter, in diesen Anwendungen die Timer-Klasse zu verwenden.