In ActionScript 3 gibt es eine neue Timer-Klasse (flash.utils.Timer), die für zeitbasierte Anwendungszwecke gedacht ist. Ein Timer löst nach einem definierten Zeitintervall ein Event aus. Zusätzlich kann bestimmt werden, ob der Timer "unendlich" lange läuft oder nach einer bestimmten Anzahl an ausgelösten Events aufhört (z.B. nach 10x in einem Intervall von 500ms).
Ein Timer in ActionScript 3 kann somit die aus ActionScript 2 bekannten Funktion setInterval, setTimeout() oder auch das onEnterFrame-Event ersetzen. (Die Funktionen setInterval/setTimeout sind zwar noch in ActionScript 3 vorhanden, erzeugen jedoch Compiler-Warnungen.)
Für Video-Anwendungen mit AS3 ist die Timer-Klasse – in Verbindung mit NetConnection/NetStream – in folgenden Anwendungsbereichen wichtig:
- Zeitanzeige eines Videos aktualisieren
- Aktualisieren eines Fortschrittsbalken (wie weit ist das Video geladen)
- Seek- bzw. Scrubbar zur Steuerung des Videos aktualisieren
- ...
Für ausführliche Beispiele mit ActionScript 2 verweise ich auf "Interaktives Video im Internet mit Flash" (Kapitel 14: ActionScript-Klassen für die Video-Wiedergabe).
How-to: Timer verwenden
Im folgenden Anschauungsbeispiel wird der Timer dazu genutzt, die aktuelle Zeit eines Videos (NetStream.time) in einem Textfeld anzuzeigen. Beispiel anschauen
Zuerst müssen zwei Klassen importiert werden: flash.utils.Timer und
flash.events.TimerEvent.
Daraufhin wird ein neues Objekt mit dem Instanznamen myTimer geschaffen. Der Konstruktor wird mit zwei Parametern ausgestattet: dem Zeitintervall in Millisekunden (notwendig) und der Anzahl der Wiederholungen (optional).
Im konkreten Beispiel wird der Timer alle 200 Millisekunden ausgelöst. Möchte man, dass der Timer "unendlich" lange läuft, gibt man als Anzahl der Wiederholungen 0 an oder lässt den Parameter einfach weg. Schreibt man stattdessen eine konkrete Zahl größer als Null, z.B. 15, wieder der Timer genau so oft ausgeführt (also 15x).
Als nächsten Schritt muss ein EventListener hinzugefügt werden. Dieser ist nötig, damit der Timer weiß, welche Funktion jeweils nach dem Auslösen eines Events gestartet werden soll. In Beispiel heißt die Funktion updateDisplay und sorgt dafür, dass die aktuelle Zeit des Videos in einem Textfeld angezeigt wird.
-
span style="color: #ff0000;">"timer"
Um den Timer loslaufen zu lassen, muss er nach dem Anfügen des Eventlistener noch mit myTimer.start() gestartet werden. Ein Timer-Objekt hat übrigens (neben dem Konstruktor) drei Methoden:
- Timer.start(): Startet den Timer.
- Timer.stop(): Stoppt den Timer.
- Timer.reset(): Setzt den Timer wieder in den Ursprungszustand (also auf 0).
Im Folgenden der komplette Beispielcode am Stück. Für die Videowiedergabe mit AS3 gibt's bereits einen Artikel hier im Blog. Die .fla-Datei zum Beispiel: download.
-
// ::::::: Video ::::::
-
"sand.flv"// neues Objekt für die Meldungen
-
// ::::::: Textfield ::::::
-
// ::::::: Timer ::::::
-
-
// Timer Klasse und Events vom Typ "TimerEvent" importieren
-
// neuer Timer: alle 200ms, unendliche Wiederholungen
-
"timer"// Eventlistener hinzufügen
-
// Funktion, die vom Timer alle 200ms aufgerufen wird
-
"Aktuelle Zeit: "// Textfeld aktualisieren
-
}
Link: Timer-Klasse (ActionScript 3 Reference)
5 Kommentare zum Beitrag "ActionScript 3: Timer Klasse"
[…] { sek.rotation = 360/60000 * getTimer(); //sekundenzeiger } dank: http://www.video-flash.de/index.php/…-timer-klasse/ jetzt hoffe ich klappt es, das ganze als video zu […]
[…] mischung aus einem interval, einer timer instanz und einer enterFrame schleife zu sein schau mal hier oder befrag einfach mal google… gibt x beispiele zu dem thema! cheers, sal __________________ […]
Danke für Deinen Post hier.
Wie nutzt man einen Timer in einer AIR Application
Versuche ich einen Timer mit var:Timer = new Timer(1000) zu deklarieren bekomme ich einen Fehler das Timer nicht mehr als 0 Argumente erwartet ?!
Siehe oben:
var myTimer:Timer = new Timer(200, 0); // neuer Timer: alle 200ms, unendliche Wiederholungen
myTimer.addEventListener("timer", updateDisplay); // Eventlistener hinzufügen
myTimer.start();
Schreibe einen Kommentar