Spiel mit Countdown
Viele Spiele brauchen einen Countdown, weil innerhalb einer bestimmten Frist eine Aufgabe gelöst werden muss. Hier sehen Sie ein ganz einfaches Spiel, wo ein Countdown gebraucht wurde. Spielen Sie es durch.
Laden Sie sich bitte jetzt das Spiel herunter und öffnen Sie es in Flash. Wir wollen uns den Countdown ein bisschen genauer anschauen. Gehen Sie in der Hauptzeitleiste in das zweite Bild. Hier finden Sie oben rechts den Movieclip, mit welchem der Countdown realisiert wurde. Doppelklicken Sie darauf, um ihn zu öffnen.
Die einfachste, aber auch ungenaueste Variante
Der Movieclip hat keine stop()-Aktion im ersten Bild, d.h. er beginnt einfach zu laufen, sobald der Abspielknopf der Hauptzeitleiste auf das zweite Bild kommt (in unserem Fall also, wenn auf den Start-Knopf gedrückt wurde). Im letzten Bild des Countdown-Movies finden Sie ein wenig Code:
//Countdown retour zaehlen
_root.countdown--;
//Wenn der Countdown abgelaufen ist, Spiel beenden
if(_root.countdown < 1){
_root.gotoAndStop("gameover");
}
Jedes Mal, wenn der Movie durchgelaufen ist, wird im Textfeld die Zahl um Eins verkleinert, wenn diese Zahl unter Eins fällt, wird in der Hauptzeitleiste auf das Bild "gameover" gesprungen. Diese Methode funktioniert natürlich nur, wenn die Anzahl der Bilder des Countdown-Movies der Bildrate des Flashfilms entspricht, denn nur dann geht ein Durchlauf genau eine Sekunde lang.
Das ist doch perfekt und ganz einfach? Nun, die Sache hat leider einen entscheidenden Haken: Es ist ungenau. Für ganz einfache Spiele mag es noch hingehen, wenn aber zum Beispiel Spielerleistungen verglichen werden sollen, weil eine Rangliste erstellt werden soll, reicht die Genauigkeit nicht mehr.
Warum ist das so: Die Genauigkeit der Bildrate von Flash-Filmen ist abhängig von der Prozessorleistung des Rechners, auf dem sie laufen. Hat es nun zum Beispiel im Inhalt des Movies Sound, wird der Prozessor beim Abspielen stark beansprucht und damit der Flash-Film als Ganzes abgebremst. Mit der oben beschriebenen Methode könnten also "Sekunden" plötzlich viel länger dauern...
Lösungen mit der globalen Funktion getTimer()
Für die Realisierung von Countdowns wurde in Flash 4 die globale Funktion getTimer() entwickelt. Mit ihr wird ausgegeben, wie viele Millisekunden verstrichen sind, seit der Flash-Player schon läuft. Doch auch der Gebrauch dieser Funktion hat einen Haken: Pro Player-Instanz wird die Startzeit nur ein einziges Mal gemessen. Werden nun neue Movies in den Player hineingeladen, verliert man aus diesem Grund die Kontrolle über die verstrichene Zeit trotzdem. Für eine bessere Lösung des Countdown-Problems sollte man seit Player 6 setInterval() verwenden.