12.3 Ereignisprozeduren
ActionScript unterscheidet zwei Arten der Ereignisprozeduren (engl. Eventhandler):
|
Zum einen sind das die durch das Schlüsselwort on eingeleiteten Ereignisprozeduren für Schaltflächen (seit Flash MX funktionieren die Schaltflächenereignisse ebenfalls mit Movieclips) und |
|
zum anderen die mit einem onClipEvent beginnenden Prozeduren für Movieclips. |
In der Tabelle »Ereignisprozeduren und unterstützte Flash-Version« finden Sie eine Liste mit allen Ereignisprozeduren, in der auch die vorausgesetzten Flash Player-Versionen angegeben sind.
12.3.1 Fehlerquelle
Eine beliebte Fehlerquelle ist der Gültigkeitsbereich (engl. scope) der Anweisungen in Ereignisprozeduren. Die Anweisungen in einer Ereignisprozedur beziehen sich bei Schaltflächen auf die Zeitleiste, in der sich die Schaltfläche befindet. Abweichend davon führt Flash die Anweisungen in Ereignisprozeduren von Movieclips bezüglich der Zeitleiste des Movieclips aus (siehe »Gültigkeitsbereich«, Seite 276).
Übrigens dürfen Sie im Gegensatz zu den onClipEvent-Anweisungen die Ereignisse bei on auch kombinieren und durch Kommata getrennt hintereinander als Parameter angeben:
on (press) {
// Drag…
this.startDrag();
}
on (release, releaseOutside) {
// …and Drop
this.stopDrag();
}
Tabelle 12.2
Ereignisprozeduren und unterstützte Flash-Version
Ereignisprozedur
|
Schaltfläche
|
Movieclip
|
on (dragOut)
|
seit Flash Player 3
|
seit Flash Player 6
|
on (dragOver)
|
seit Flash Player 3
|
seit Flash Player 6
|
on (keyPress "taste")
|
seit Flash Player 4
|
seit Flash Player 6
|
on (press)
|
seit Flash Player 3
|
seit Flash Player 6
|
on (release)
|
seit Flash Player 2
|
seit Flash Player 6
|
on (releaseOutside)
|
seit Flash Player 3
|
seit Flash Player 6
|
on (rollOut)
|
seit Flash Player 3
|
seit Flash Player 6
|
on (rollOver)
|
seit Flash Player 3
|
seit Flash Player 6
|
onClipEvent (data)
|
|
seit Flash Player 5
|
onClipEvent (enterFrame)
|
|
seit Flash Player 5
|
onClipEvent (keyDown)
|
|
seit Flash Player 5
|
onClipEvent (keyUp)
|
|
seit Flash Player 5
|
onClipEvent (load)
|
|
seit Flash Player 5
|
onClipEvent (mouseDown)
|
|
seit Flash Player 5
|
onClipEvent (mouseMove)
|
|
seit Flash Player 5
|
onClipEvent (mouseUp)
|
|
seit Flash Player 5
|
onClipEvent (unload)
|
|
seit Flash Player 5
|
12.3.2 on
Die Anweisung on leitet einen Block in geschweiften Klammern ein, dessen Ausführung von einem als Parameter angegebenen Ereignis abhängt.
|
Bemerkung: |
|
Diese Anweisung steht je nach Ereingis seit dem Flash Player 2 zur Verfügung (siehe obenstehende Tabelle »Ereignisprozeduren«). Diese Anweisung ist auf Schaltflächen- und seit Flash MX ebenfalls auf Movieclip-Instanzen erlaubt. In Schlüsselbildern funktioniert diese Anweisung hingegen nicht. |
|
|
|
Syntax: |
on (ereignis1, ereignis2, ... ereignisN) {
anweisungen;
}
|
Parameter: |
|
anweisungen: Innerhalb der geschweiften Klammern geben Sie die Anweisungen an, die beim Eintritt eines der angegebenen Ereignisse ausgeführt werden sollen. |
|
|
|
ereignis1 bis ereignisN: Als Ereignis werden der oder die Auslöser bezeichnet, die zur Ausführung der Anweisungen führen: Wenn eines der angegebenen Ereignisse stattfindet, werden die in geschweiften Klammern stehenden Anweisungen abgearbeitet. Sollten Sie mehr als ein Ereignis angeben wollen, so müssen diese durch Kommata getrennt werden. Die folgenden Werte sind als Ereignis erlaubt: |
|
|
dragOut: Drücken der Maustaste, während sich der Mauszeiger über der Schaltfläche befindet (aktiver Bereich bzw. hitArea) und anschließendes Hinausziehen des Mauszeigers.
dragOver: Während sich der Mauszeiger über dem aktiven Bereich der Schaltfläche (hitArea) befindet, wird die Maustaste gedrückt gehalten, der Mauszeiger aus dem Schaltflächenbereich hinaus- und dann wieder über die Schaltfläche gezogen (siehe Hinweis »Als Menüelement behandeln« auf Seite 298).
keyPress ("taste"): Drücken der durch taste angegebenen Taste. Hierbei unterscheidet Flash zwischen Groß- und Kleinschreibung. Leider funktionieren aber Sonderzeichen, insbesondere deutsche Umlaute, zum großen Teil nicht korrekt. In der Tabelle »Erlaubte Funktionstasten für keyPress-Ereignis« sind außerdem sämtliche zusätzlich erlaubten Funktionstasten aufgelistet (siehe auch onKeyDown, onKeyUp (Seite 233) und Key-Objekt).
Tabelle 12.3
Erlaubte Funktionstasten für keyPress-Ereignis
Parameter
|
Taste
|
keyPress "<Backspace>"
|
Rückschritt
|
keyPress "<Delete>"
|
(Entf)
|
keyPress "<Down>"
|
(Ű)
|
keyPress "<End>"
|
(Ende)
|
keyPress "<Enter>"
|
(˘)
|
keyPress "<Escape>"
|
(Esc) (beendet normalerweise den Projektor, weshalb diese Taste nicht immer Sinn macht – im Testmodus innerhalb der Entwicklungsumgebung sollte zum Ausprobieren die Einstellung Steuerung • Tastenkombinationen deaktivieren eingeschaltet sein)
|
keyPress "<Home>"
|
(Pos1)
|
keyPress "<Insert>"
|
(Einfg)
|
keyPress "<left>"
|
(Ď)
|
keyPress "<PageDown>"
|
(BildŰ)
|
keyPress "<PageUp>"
|
(BildÓ)
|
keyPress "<Right>"
|
(Ě)
|
keyPress "<Space>"
|
Leer
|
keyPress "<Tab>"
|
(˙)
|
keyPress "<Up>"
|
(Ó)
|
press: Drücken der Maustaste, während sich der Mauszeiger über dem aktiven Bereich der Schaltfläche (hitArea) befindet. Im Gegensatz zu dem mouseDown-Ereignis erhält nur die eine Instanz die Nachricht über das Ereignis, die mit ihrer aktiven Fläche unmittelbar unterhalb des Mauszeigers liegt (siehe auch mouseDown und Mouse-Objekt).
release: Loslassen der Maustaste, während sich der Mauszeiger über dem aktiven Bereich der Schaltfläche (hitArea) befindet (siehe auch mouseUp und Mouse-Objekt).
releaseOutside: Loslassen der Maustaste, während sich der Mauszeiger außerhalb der Schaltfläche befindet (funktioniert nur, nachdem die Maustaste gedrückt wurde, während sich der Mauszeiger innerhalb der Schaltfläche befand) (siehe auch mouseUp und Mouse-Objekt).
rollOut: Ziehen des Mauszeigers aus dem aktiven Bereich der Schaltfläche (hitArea) hinaus.
rollOver: Ziehen des Mauszeigers über den aktiven Bereich der Schaltfläche (hitArea).
|
Beispiele: |
on.fla
on (press) {
trace("press");
}
on (release) {
trace("release");
}
on (releaseOutside) {
trace("releaseOutside");
}
on (keyPress "<Enter>") {
trace("Eingabetaste");
}
on (rollOver) {
trace("rollOver");
}
on (rollOut) {
trace("rollOut");
}
on (dragOver) {
trace("dragOver");
}
on (dragOut) {
trace("dragOut");
}
Als Menüelement behandeln
Einige Ereignisse verhalten sich anders, sobald eine Instanz als Menüelement behandelt wird. Diese Einstellung nehmen Sie für jede Instanz einzeln entweder im Eigenschafteninspektor (bei Schaltflächen) oder über die Eigenschaft trackAsMenu (bei Buttons und Movieclips) vor. Insbesondere das Ereignis dragOver macht erst in dieser Kombination wirklich Sinn! Sobald nämlich eine Instanz als Menüelement agiert, muss die Ereignisfolge nicht mehr auf der Instanz mit einem Drücken der Maustaste gestartet werden. D. h. Flash löst dragOver auch aus, wenn Sie die Maustaste irgendwo drücken und dann auf die Instanz ziehen.
12.3.3 onClipEvent
Die Anweisung onClipEvent leitet einen Block in geschweiften Klammern ein, dessen Ausführung von einem als Parameter angegebenen Ereignis abhängt.
|
Bemerkung: |
|
Diese Anweisung steht seit dem Flash Player 5 zur Verfügung (siehe Tabelle »Ereignisprozeduren« auf Seite 295). Diese Anweisung ist nur auf Movieclip-Instanzen und nicht auf Schaltflächeninstanzen oder in Schlüsselbildern erlaubt. |
|
|
|
Syntax: |
onClipEvent (ereignis) {
anweisung(en);
}
|
Parameter: |
|
anweisung(en): Innerhalb der geschweiften Klammern geben Sie die Anweisungen an, die beim Eintritt eines der angegebenen Ereignisse ausgeführt werden sollen. |
|
|
|
ereignis: Als Ereignis wird der Auslöser bezeichnet, der zur Ausführung der Anweisungen führt: Wenn das angegebene Ereignis stattfindet, werden die in geschweiften Klammern stehenden Anweisungen abgearbeitet. Die folgenden Werte sind als Ereignis erlaubt: |
|
|
data: Dieses Ereignis wird ausgelöst, wenn Flash durch loadVariables oder loadMovie Daten empfängt. Bei loadVariables tritt das Ereignis einmalig auf, sobald die letzte Variable geladen wurde. Bei loadMovie wird dieses Ereignis während des Ladens mehrmalig beim Empfang der einzelnen Datenpakte ausgelöst.
enterFrame: Dieses Ereignis löst eine Flash-Anwendung kontinuierlich in der Geschwindigkeit der Bildrate aus.
keyDown: Dieses Ereignis löst Flash immer dann aus, wenn eine Taste gedrückt wird. Mit Hilfe des Key-Objektes ermitteln Sie anschließend, welche Tasten gedrückt sind (siehe auch Key-Objekt).
keyUp: Dieses Ereignis tritt beim Loslassen einer Taste ein (siehe auch Key-Objekt).
load: Sobald die Movieclip-Instanz in der Zeitleiste erscheint, wird dieses Ereignis ausgelöst.
unload: Dieses Ereignis wird im ersten Bild ausgeführt, nachdem die Movieclip-Instanz aus der Zeitleiste entfernt wurde. Erst nachdem die mit dem Movieclip-Ereignis unload verknüpften Anweisungen verarbeitet sind, führt Flash die im betreffenden Bild befindlichen Anweisungen aus. Da die bezüglich des Ereignisses definierte Movieclip-Instanz in diesem Moment nicht mehr existiert, sollten Operationen auf diese vermieden werden. Andernfalls kann es zu unvorhergesehenen Effekten bis hin zum Absturz der Anwendung kommen.
mouseMove: Dieses Ereignis wird bei jeder Bewegung der Maus ausgelöst (siehe auch Mouse-Objekt).
mouseDown: Das Drücken der Maustaste löst dieses Ereignis aus. Dabei ist es im Gegensatz zu dem press-Ereignis der on-Anweisung egal, wo sich die Maus befindet.
mouseUp: Das Loslassen der Maustaste erzeugt dieses Ereignis. Dabei ist es im Gegensatz zu dem release-Ereignis der on-Anweisung egal, wo sich die Maus befindet.
|
Beispiele: |
onClipEvent.fla
onClipEvent (load) {
trace("load");
}
onClipEvent (enterFrame) {
trace("enterFrame");
}
onClipEvent (unload) {
trace("unload"); // erfordert das Entfernen der Instanz
}
onClipEvent (mouseDown) {
trace("mouseDown");
}
onClipEvent (mouseUp) {
trace("mouseUp");
}
onClipEvent (mouseMove) {
trace("mouseMove");
}
onClipEvent (keyDown) {
trace("keyDown");
}
onClipEvent (keyUp) {
trace("keyUp");
}
onClipEvent (data) {
trace("data"); // erfordert ein loadMovie oder loadVariables
}
Benutzerereignis versus Systemereignisse
Einige Ereignisse sind benutzerunabhängig wie z.B. enterFrame. Andere hängen von Aktionen des Benutzers ab. Dazu zählt mouseMove. Nicht immer ist das nächstliegende Ereignis auch das beste. Möchten Sie zum Beispiel ein Objekt abhängig von der Mausbewegung steuern, dann sollten Sie in den meisten Fällen das Ereignis enterFrame dem mouseMove vorziehen. Dies liegt daran, dass Flash die Bewegung der Maus unabhängig von der Bildrate ermittelt und so deutlich mehr Systemressourcen benötigt, obwohl die Position doch nur beim Bildwechsel interessiert (dazwischen wird die Darstellung normalerweise ohnehin nicht aktualisiert).
Sobald die Bildrate der Anwendung jedoch sehr gering ist, kann die Kombination eines Benutzerereignisses mit der Funktion updateAfter
Event wiederum Vorteile bieten (siehe updateAfterEvent, Seite 291).
|