Im ersten Beispiel möchte ich kurz zeigen, wie man mit der Date-Klasse in ActionScript 3 umgeht. Ein Date-Objekt kann ein Datum und eine Uhrzeit beinhalten. Im Anschluss folgt ein Beispiel, wie man auf einfache Weise die aktuelle Zeitposition eines Videos im Format Minuten/Sekunden (z.B. 1:30) realisieren kann (Beispiel anschauen).
Beispiel 1: Date-Objekte
Hier zunächst das Ergebnis-SWF bzw. die vier Date-Objekte, die danach erklärt werden:
[kml_flashembed movie=“http://www.video-flash.de/wp-content/uploads/2007/01/as3date/as3date.swf“ width=“520″ height=“200″ /]
Wird ein Objekt der Date-Klasse mit einem leeren Konstruktor erstellt, enthält er das (zur Laufzeit) aktuelle Datum und die aktuelle Uhrzeit (vgl. erste Zeile im SWF).
[as]var dt1:Date = new Date();[/as]
Des Weiteren kann man dem Konstruktor das Jahr, den Monat und dem Tag mitgeben. Dabei beginnen die Monate nicht mit Eins, sondern Null (=Januar). Die Tage sind ab Eins durchnummeriert (1-31).
[as]var dt2:Date = new Date(2007, 7, 3);[/as]
Als nächsten Schritt kann man auch eine Zeit ergänzen, in Stunden, Minuten, Sekunden. Im Beispiel ist dies genau 10:00 Uhr
[as]var dt3:Date = new Date(2007, 7, 3, 10, 0, 0);[/as]
Interessant wird es nun, wenn man Werte angibt, die außerhalb den in der Dokumentation angegebenen Bereichen liegen. Für second schreibt die Doku beispielsweise: second:Number (default = 0) — An integer from 0 to 59. Wählt man ein höhere Zahl, z.B. 100, wird diese automatisch richtig umgerechnet. Das Date-Objekt enthält also 1 Minute 40 Sekunden.
[as]var dt4:Date = new Date(2007, 0, 1, 0, 0, 100); // 100 Sekunden setzen
trace(„dt4.getMinutes: “ + dt4.getMinutes());[/as]
Über die Methoden wie getMinutes oder getSeconds lassen sich die einzelnen Bestandteile einer Zeitangabe auslesen.
Undokumentierte Funktionen in der Date-Klasse
Darron Schall weist in seinem Blog auf diese undokumentierten Funktionen hin. Auch negative Wert sind möglich. Beispiel new Date( 2006, 0, 1, -1 ) ist eine Stunde früher als der erste Januar, also der 31.12.05 um 23:00. Man kann also nach Belieben mit den Date-Objekten „rechnen“.
Beispiel 2: Zeitanzeige für eine .flv-Datei
Spielt man ein Video über NetConnection/NetStream ab, wird die aktuelle Zeit des Videos (ns.time) ausschließlich in Sekunden zurückgegeben. Ein Video, das 1:20 dauert, durchläuft also 1 bis 80.
Nimmt man also ns.time und packt den Wert in ein Date-Objekt, rechnet dieses die Sekunden automatisch in die Form Stunden/Minuten/Sekunden um. Nun kann man mit getMinutes() und getSeconds() die Zeit des Videos auslesen.
[as]vidTime = new Date(2007, 0, 1 , 0, 0, ns.time);
… = vidTime.getMinutes() + „:“ + vidTime.getSeconds();[/as]
Damit bei einer einstelligen Sekundenzahl 1:05 statt 1:5 angezeigt wird, baut man noch eine Fallunterscheidung ein.
[as]if (vidTime.getSeconds() < 10) {
tf.text = vidTime.getMinutes() + ":0" + vidTime.getSeconds();
}
else {
tf.text = vidTime.getMinutes() + ":" + vidTime.getSeconds();
};
[/as]
Quellcode zu Beispiel 2
Hier noch der komplette Quellcode zum Beispiel:
[as]
// ::: Video :::
var myVideo:Video = new Video(320,180);
addChild(myVideo);
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.client = new Object();
myVideo.attachNetStream(ns);
ns.play(„gv.flv“);
// ::: Timer :::
import flash.utils.Timer;
import flash.events.TimerEvent;
var myTimer:Timer = new Timer(200);
myTimer.addEventListener(„timer“, updateDisplay);
myTimer.start();
// ::: Date :::
var vidTime:Date;
function updateDisplay(event:TimerEvent):void {
vidTime = new Date(2007, 0, 1 , 0, 0, ns.time);
if (vidTime.getSeconds() < 10) {
tf.text = vidTime.getMinutes() + ":0" + vidTime.getSeconds();
}
else {
tf.text = vidTime.getMinutes() + ":" + vidTime.getSeconds();
};
tf2.text = tf.text;
}
// ::: Buttons :::
forwardButton.addEventListener(MouseEvent.MOUSE_UP, forward);
rewindButton.addEventListener(MouseEvent.MOUSE_UP, rewind);
resetButton.addEventListener(MouseEvent.MOUSE_UP, reset);
function forward(event:MouseEvent) {
ns.seek(ns.time+10);
};
function rewind(event:MouseEvent) {
ns.seek(ns.time-10);
};
function reset(event:MouseEvent) {
ns.seek(0);
ns.resume();
};
[/as]
Link: Beispiel anschauen
Link: Darron Schall (Beitrag vom 28.12.06)
Link: Date-Klasse (ActionScript 3 Reference)