Ereignislauf, Event-Phasen (nur für Displayobjekte)
Eine gute Übersicht über dieses Thema findet man in der Flash-Hilfe unter
Programmieren mit ActionScript 3.0 > Verarbeiten von Ereignissen > Ereignisablauf
Beim Auftreten von Ereignissen (events) löst der Flash-Player Ereignisobjekte (event objects) aus.
Wenn sich
das Ereignisziel in der Anzeigeliste (display list) befindet, sendet der Flash-Player das
Ereignisobjekt an die Anzeigeliste. Das Ereignisobjekt durchläuft dann die
Anzeigeliste, bis das Ereignisziel erreicht ist.
Wenn das Ereignisziel kein Displayobjekt ist, wird das Ereignisobjekt direkt an das Ereignisziel gesandt.
Mit dem Ereignisablauf wird die Bewegung eines Ereignisobjekts
innerhalb der Anzeigeliste beschrieben.
Wenn der Flash-Player ein Ereignisobjekt auslöst, durchläuft es die Hierarchie
von der Bühne bis zum Zielknoten und zurück. Der Zielknoten ist das
Anzeigelistenobjekt, in dem das Ereignis aufgetreten ist.
Wenn man beispielsweise auf das Vorderrad klickt, löst der Flash-Player ein Ereignisobjekt aus und verwendet die MovieClip-Instanz vorderrad als Zielknoten.
Der Ereignisablauf ist konzeptionell in drei Abschnitte unterteilt:
- Der erste
Abschnitt wird als Empfangsphase (capture phase) bezeichnet. Diese Phase besteht aus allen
Knoten von der Bühne bis zum übergeordneten Knoten des Zielknotens.
Im Beispiel: Instanz der Bühne > Maintimeline Landstrasse.swf > Spriteinstanz auto
- Der zweite
Abschnitt ist die sogenannte Zielphase (target phase), die nur aus dem Zielknoten besteht.
Im Beispiel: Movieclipinstanz vorderad
- Der
dritte Abschnitt wird Aufstiegsphase (bubbling phase - Aufsteigen von Blasen) genannt. Diese besteht aus den Knoten, die
vom übergeordneten Knoten des Zielknotens bis zur Bühne zurück durchlaufen
werden.
Im Beispiel: Spriteinstanz auto > Maintimeline Landstrasse.swf > Instanz der Bühne
In ActionScript 3.0 kann man Ereignis-Listener nicht nur dem Zielknoten, sondern auch jedem beliebigen Knoten entlang des Ereignisablaufs hinzufügen.
Die Möglichkeit, Ereignis-Listener entlang des Ereignisablaufs hinzuzufügen, ist dann hilfreich, wenn eine Benutzerschnittstellenkomponente aus mehr als einem Objekt besteht.
Im obigen Beispiel kann man z.B. dem ganzen Auto (der Spriteinstanz auto) einen Mausklick-Listener hinzufügen. Klickt man nun auf eines der beiden Räder, die Unterobjekte sind, wird in der Empfangsphase und/oder Aufstiegsphase auch der Eventhandler des ganzen Autos (der Spriteinstanz auto) ausgeführt, obwohl nur das Rad der Zielknoten ist.
Ein weiteres Beispiel aus der Flash-Hilfe: Ein Button-Objekt enthält beispielsweise häufig ein Text-Objekt mit dem Schaltflächentext. Ohne die Möglichkeit, dem Ereignisablauf Listener hinzuzufügen, müssten Sie sowohl dem Button-Objekt als auch dem Text-Objekt einen Listener hinzufügen, um sicherzustellen, dass Sie Benachrichtigungen über Mausklickereignisse für die gesamte Schaltfläche erhalten. Der Ereignisablauf ermöglicht jedoch die Definition eines einzigen Ereignis-Listeners für das Button-Objekt, mit dem Mausklickereignisse für das Text-Objekt oder für die Bereiche des Button-Objekts verarbeitet werden, die nicht durch das Text-Objekt verdeckt sind.
Nicht jedes Ereignisobjekt durchläuft jedoch alle drei Phasen des Ereignisablaufs.
enterFrame-Ereignisse werden direkt an den Zielknoten gesendet und durchlaufen weder die Empfangsphase noch die Aufstiegsphase.
Mausereignis-Objekte vom Typ ROLL_OVER und ROLL_OUT haben keine Aufstiegsphase. Alle anderen Mausereignisse haben sowohl eine Empfangs- als auch eine Aufstiegsphase.