13.3 Fortlaufende Animation mit setInterval oder onEnterFrame?
Eine Animation (oder auch Veränderung) kann von einer Nutzereingabe abhängen. Das war in Kapitel 12 der Fall, sowohl bei Drag & Drop als auch beim Farbwechsel. Daneben gibt es Animationen, die aus Einzelbildern bestehen. Ihre Realisierung ist in der Zeitleiste kein Problem, wie aber funktioniert das beim Programmieren? Sie benötigen zwei Teile:
- einen immer wiederkehrenden Aufruf und
- eine Veränderung bei jedem Aufruf.
Die Veränderung lässt sich am einfachsten mit einer Variable realisieren, deren Wert bei jedem Aufruf wechselt. Für den wiederkehrenden Aufruf gibt es zwei Lösungen:
- einen fortwährenden Funktionsaufruf mit setInterval(Funktion, Interval, Parameter)
- und das Ereignis enterFrame.
Beiden Methoden sind Sie schon begegnet: setInterval() beispielsweise in Kapitel 8, »Textfelder«, für den Scrollbalken und in Kapitel 10, »Datum und Uhrzeit«, zum Aktualisieren der Uhr; enterFrame haben Sie in Kapitel 11, »Rechnen«, bei unserem Schaukelstuhlbeispiel kennen gelernt. Im Folgenden wollen wir Ihnen die genauen Unterschiede zwischen beiden Methoden erklären.
setTimeout() |
JavaScript besitzt die Funktion setTimeout(Funktion, Zeit, Parameter), die eine Funktion zeitversetzt und nur einmal aufruft. ActionScript hat diese Funktion nicht übernommen. Um ihre Wirkung zu simulieren, müssen Sie mit setInterval() eine Funktion aufrufen und innerhalb der Funktion mit clearInterval() den regelmäßigen Aufruf gleich wieder löschen. |
setInterval()
setInterval() ist eine globale Funktion: Sie ist nicht an einen MovieClip gebunden und Sie können diese Funktion jederzeit ausführen. setInterval(Funktion, Interval, Parameter) ruft eine Funktion in regelmäßigen Abständen auf. Das Intervall für die Aufrufe wird in Millisekunden angegeben. Die Parameter folgen danach und sind durch Kommas getrennt:
setInterval(Funktion, Interval, Parameter1, Parameter2, ...);
setInterval() gibt eine numerische ID zurück, die Sie in einer Variablen speichern können:
var id_num:Number = setInterval(Funktion, Interval, Parameter);
Der Vorteil dieser Vorgehensweise: Mit der ID und der Funktion clearInterval(ID) löschen Sie einen regelmäßigen Funktionsaufruf wieder.
clearInterval(id_num);
enterFrame
enterFrame ist ein Ereignis für MovieClips. Meist kommt es als Ereignisprozedur zum Einsatz:
_root.onEnterFrame = function() { Anweisungen; }
Alternativ können Sie es auch bei onClipEvent in der Aktion des MovieClips verwenden:
onClipEvent (enterFrame) { Anweisungen; }
enterFrame gibt es erst seit Flash MX. In den Versionen davor ist setInterval() die einzige Möglichkeit für fortlaufende Animationen.
Wie oft enterFrame eintritt, richtet sich nach der Abspielrate des Films, denn bei jedem Bild wird das Ereignis ausgeführt. Wenn Sie eine Abspielrate von 12 Bildern pro Sekunde (bps) haben, tritt das Ereignis also zwölfmal pro Sekunde ein.
Wenn der Flash-Player die Abspielrate allerdings aus Performance-Gründen reduziert, sinkt auch die Rate, in der enterFrame ausgeführt wird.
Für die Animation ergibt sich daraus das Problem, dass Sie keine Kontrolle haben, wie oft das Ereignis eintritt.
Wenn Sie also einen gesteuerten Zeitpunkt brauchen, an dem der Aufruf erfolgt, sollten Sie setInterval() verwenden.
Wenn Sie dagegen Tastatureingaben regelmäßig überwachen müssen, ist enterFrame zu bevorzugen.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.