Einen genaueren Blick auf das ActionScript 3.0 Event Framework

In diesem Lernprogramm werde ich das ActionScript 3.0 Event Framework erläutern. Nach diesem Lernprogramm sollten Sie ein klares Verständnis für die Funktionsweise von Ereignissen, Ereignisverteilern und Ereignislistenern haben.

Was wirst du lernen??

Da das AS3-Event-Framework sehr groß ist, werden wir uns mit all den verschiedenen Aspekten des Event-Frameworks befassen. Wir werden über Folgendes lernen:

  • Veranstaltungen
  • Event Dispatcher
  • Event-Hörer
  • Ereignisfluss
  • Oft verwendete Ereignisse
  • Und ein paar Tipps und Tricks

Schritt 1: Das Ereignis-Framework vereinfacht

Ich denke wirklich, dass es Ihnen schwer fallen wird, den Rahmen für die Ereignisse zu verstehen, wenn wir direkt in den Fachjargon einsteigen, daher werde ich zuerst eine reale Situation beschreiben. Die gesamte Situation ist eine Metapher für den Veranstaltungsrahmen. Okay, also los geht's:

Ich bin ein begeisterter Leser von Computerkunst und ich warte jeden tag auf die neue ausgabe. Wenn ich das Problem erhalte, beginne ich es zu lesen.

Schritt 2: Analysieren der Metapher des Event-Frameworks

Okay, wir haben einiges zu tun:

  • Ich erhalte die neue Ausgabe. Dieser Erhalt eines Problems ist ein Veranstaltung.
  • Dieses Ereignis findet irgendwo statt, es passiert mir, ich bin das EventDispatcher.
  • Ich warte auf die neue Ausgabe. Ich bin ein Objekt und warte auf dieses Ereignis. Ich bin ein Objekt, das ist Hören für das Ereignis zu geschehen. Ich bin ein Objekt mit einem Ereignis-Listener mir hinzugefügt Dieser Ereignis-Listener hört auf ein bestimmtes Ereignis (d. H. Er erhält ein neues Problem).
  • Wenn ich das Problem erhalte, beginne ich es zu lesen. Wenn das Ereignis passiert ist, mache ich etwas, ich führe eine Funktion aus. Ich kümmere mich um die Veranstaltung. Die Funktion, die ich mache, heißt Handler und / oder die Listener-Funktion.

Schritt 3: Technisches Jargon - Ereignis

Ich habe mehrere Dinge erwähnt:

  • Veranstaltung
  • EventDispatcher
  • Ereignis-Listener
  • Handler / Listener-Funktion

Ein Ereignis ist ein Objekt, das ein Vorkommnis beschreibt, in Schritt 1 Die Veranstaltung ist die Ankunft einer neuen Ausgabe.

Meistens sehen Sie ein Ereignis, das in einer Struktur ähnlich der folgenden geschrieben ist:

 MouseEvent.CLICK

Dieses Codefragment besteht aus zwei Dingen:

  • MouseEvent Dies ist die Klasse, die ein oder mehrere Ereignisse enthält. Dies ist immer in CamelCase geschrieben.
  • KLICKEN Dies ist der Ereignistyp. Dies ist immer in GROSSBUCHSTABEN geschrieben.

Der Ereignistyp ist eigentlich eine statische Konstantenzeichenfolge. Es mag seltsam klingen, aber ein Event ist nichts anderes als eine Zeichenfolge. Führen Sie dieses Snippet aus.

 trace (MouseEvent.MOUSE_MOVE);

Sie werden als Ausgabe erhalten mouseMove. Wir haben gerade die Konstante MOUSE_MOVE verfolgt, die sich in der MouseEvent-Klasse befindet. Eine Veranstaltung ist eine Zeichenfolge! Diese Zeichenfolge repräsentiert jedoch das Auftreten (in diesem Beispiel) der Bewegung der Maus.

Schritt 4: Technisches Jargon - EventDispatcher

Eine Veranstaltung findet immer irgendwo statt. Wo das Ereignis passiert, wird es ausgelöst (versendet). Die Wurzeln des Dispatchings von Ereignissen liegen in der Klasse EventDispatcher. Stellen Sie fest, dass das Ereignis dort stattfindet, wo das Ereignis abgesetzt wird. Also wenn Filmausschnitt A löst ein Ereignis aus, dann wird ein Ereignis-Listener (Ereignis-Listener wird in Schritt 5 erklärt) hinzugefügt Filmausschnitt B würde dieses Ereignis nicht erhalten.

Zur Vereinfachung haben alle Anzeigeobjekte die integrierte Funktion dispatchEvent (Ereignis: Ereignis), wie viele andere Klassen.

 var myMC: MovieClip = neuer MovieClip (); myMC.dispatchEvent (neues Ereignis (MouseEvent.CLICK));

In den meisten Fällen werden Ereignisse jedoch nicht manuell ausgelöst, sondern in der Regel automatisch. Wenn ich beispielsweise auf Filmclip A klicke, würde automatisch das Ereignis MouseEvent.CLICK ausgelöst.

Schritt 5: Technisches Jargon - Event Listener

Wenn ein bestimmtes Ereignis eintritt, möchten wir als Flash-Entwickler etwas tun, um auf dieses Ereignis zu reagieren. Veranstaltungshörer sind das, was Sie brauchen. Event-Listener haben keine eigene Klasse, nein, sie sind ein bisschen anders. Ereignis-Listener werden einem Objekt hinzugefügt. Ereignis-Listener sind Objekte, die ein bestimmtes Ereignis "hören". Wenn dieses Ereignis eintritt, wird eine Funktion aufgerufen. A Handler (Funktion).

Schauen Sie sich das Bild unten an und zeigen Sie die Syntax hinter der Funktion addEventListener (), welche verwendet wird, um einen Ereignis-Listener hinzuzufügen:

Tatsächlich sind das nicht alle Parameter, die die addEventListener-Methode akzeptiert, es gibt immer noch drei, die ich nicht erwähnt habe. Sie werden sie fast nie verwenden, vor allem, wenn Sie gerade mit Ereignis-Listenern begonnen haben. Sehen wir uns noch einmal die Struktur der addEventListener-Methode an.

 addEventListener (Typ: String, Listener: Funktion, useCapture: Boolean = false, Priorität: int = 0, useWeakReference: Boolean = false): void

Lassen Sie uns die letzten 3 Parameter besprechen:

  • useCapture: Wenn dieser Parameter auf true gesetzt ist, hören wir das Ereignis in der Erfassungsphase. Standardmäßig ist dieser Parameter auf "false" gesetzt, sodass das Ereignis in der Ziel- und Blasenphase überwacht wird. Wir werden den Ereignisfluss in besprechen Schritt 10.
  • Priorität: Auch wenn es so aussieht, als würden alle Ereignis-Listener gleichzeitig arbeiten, tun sie das eigentlich nicht. Manchmal können sie miteinander in Konflikt geraten. Dadurch wird sichergestellt, dass ein bestimmter Ereignis-Listener eine höhere Priorität hat als ein anderer Ereignis-Listener.
  • useWeakReference: Wenn dieser Parameter auf true gesetzt ist, wird eine schwache Verbindung zwischen dem Objekt- und Ereignis-Listener erstellt. Nun, was heißt das? Normalerweise werden Objekte Müll gesammelt, wenn es keine Hinweise darauf gibt. Wenn das Objekt entfernt wird, wo ein Ereignis-Listener hinzugefügt wird, ist es noch vorhanden, wenn es an anderer Stelle referenziert wird. Das passiert mit starke Speicherreferenzen. Mit schwache Speicherreferenzen Der Ereignis-Listener wird entfernt, wenn das hinzugefügte Objekt entfernt wird. Ich persönlich setze diesen Parameter auf true (daher verwende ich schwache Speicherreferenzen).

Das Entfernen eines Ereignis-Listeners ist genauso einfach wie das Hinzufügen eines Ereignis-Listeners.

 // Dadurch wird der Bühne ein Ereignis-Listener hinzugefügt. stage.addEventListener (MouseEvent.CLICK, clickHandler); // Dadurch wird der Ereignis-Listener entfernt, der der Bühne hinzugefügt wurde stage.removeEventListener (MouseEvent.CLICK, clickHandler);

Schritt 6: Handler / Listener-Funktion

Wenn das Ereignis auftritt, auf das ein Ereignis-Listener wartet, ruft er eine Funktion auf. Diese Funktion heißt Handler oder der Listener-Funktion. Schauen Sie sich das Bild unten an und zeigen Sie die Syntax des Handlers:

Beachten Sie das Argument im Handler. Dieses Argument ist obligatorisch. Die Listener-Funktion hat nur ein Argument und darf nicht mehr haben. Diese Veranstaltung enthält Informationen über die Veranstaltung. Wir sprechen darüber in Schritt 9.

Schritt 7: Hinzufügen eines Ereignis-Listeners und -Handlers

Jetzt möchten wir, dass myMC auf das abgesendete Ereignis reagiert, also fügen wir ein Ereignis und anschließend die Handler-Funktion hinzu. Unser Code wird so aussehen:

 // unseren myMC-Movieclip erstellen var myMC: MovieClip = new MovieClip (); // myMC das Ereignis auslösen lassen MouseEvent.CLICK myMC.dispatchEvent (neues Ereignis (MouseEvent.CLICK)); // füge myMC einen Ereignis-Listener hinzu, der auf das Ereignis MouseEvent.CLICK wartet und clickHandler myMC.addEventListener (MouseEvent.CLICK, clickHandler) aufruft; // Definiere die Handlerfunktion function clickHandler (event: Event) trace ("Ich habe das Ereignis gehört MouseEvent.CLICK"); 

Testen Sie anschließend Ihren Film (Windows: Strg + Eingabetaste, Mac: Cmd + Eingabetaste).

Haben Sie eine Ausgabe erhalten? Nein? Nun, ich auch nicht. Im nächsten Schritt schauen wir uns an, was schief läuft.

Schritt 8: Code-Reihenfolge

Was läuft also falsch? Nun, es kann zumindest kein Syntaxfehler sein Ich bin nichts bekommen Nein, das ist technisch kein Fehler. Sehen Sie sich den Code erneut an, denken Sie jedoch daran, dass der Code zeilenweise ausgeführt wird:

 // unseren myMC-Movieclip erstellen var myMC: MovieClip = new MovieClip (); // myMC das Ereignis auslösen lassen MouseEvent.CLICK myMC.dispatchEvent (neues Ereignis (MouseEvent.CLICK)); // füge myMC einen Ereignis-Listener hinzu, der auf das Ereignis MouseEvent.CLICK wartet und clickHandler myMC.addEventListener (MouseEvent.CLICK, clickHandler) aufruft; // Definiere die Handlerfunktion function clickHandler (event: Event) trace ("Ich habe das Ereignis gehört MouseEvent.CLICK"); 

Ich hoffe, Sie haben erkannt, was schief gelaufen ist: Das Ereignis wird ausgelöst, bevor ein Ereignislistener zu myMC hinzugefügt wurde. Wenn der Ereignis-Listener hinzugefügt wurde, ist es zu spät, das Ereignis ist eingetreten. Zum Glück ist es einfach zu lösen, ändern Sie einfach die Reihenfolge und fügen Sie zuerst den Ereignis-Listener hinzu. Anschließend lösen Sie das Ereignis aus:

 // unseren myMC-Movieclip erstellen var myMC: MovieClip = new MovieClip (); // füge myMC einen Ereignis-Listener hinzu, der auf das Ereignis MouseEvent.CLICK wartet und clickHandler myMC.addEventListener (MouseEvent.CLICK, clickHandler) aufruft; // myMC das Ereignis auslösen lassen MouseEvent.CLICK myMC.dispatchEvent (neues Ereignis (MouseEvent.CLICK)); // Definiere die Handlerfunktion function clickHandler (event: Event) trace ("Ich habe das Ereignis gehört MouseEvent.CLICK"); 

Warum haben wir das alles gemacht? Nun, Sie werden wahrscheinlich auf dieses Problem stoßen und es kann eine Weile dauern, bis Sie erkennen, was los ist. Es ist besser, Ihnen das Problem zu zeigen und Ihnen beizubringen, wie Sie es lösen können.

Schritt 9: Das Ereignisargument

Jede Handlerfunktion hat ein Argument. das Ereignisargument. Dieses Argument enthält Daten zum Ereignis und zum Dispatcher. Der Parameter enthält Eigenschaften, die wir lesen möchten. Hier sind einige der am häufigsten verwendeten:

  • ZielDies gibt das Zielobjekt und somit den Event-Dispatcher des Ereignisses zurück.
  • derzeitiges Ziel: Dies gibt das aktuell anvisierte Objekt innerhalb des Ereignisflusses zurück. Wir sprechen über den Ereignisfluss in Schritt 10.
  • Art: Dies gibt die Ereigniszeichenfolge zurück. Der Wert wird immer in camelCase geschrieben. MOUSE_DOWN hat also den Wert mouseDown.

Damit können wir denselben Handler für verschiedene Arten von Ereignissen verwenden. Wie? Nun, wir werden das im nächsten Schritt besprechen.

Schritt 10: Mehrere Events, eine Listener-Funktion

Okay, zuerst sehen wir uns dieses Codefragment an:

 stage.addEventListener (MouseEvent.MOUSE_DOWN, downHandler); stage.addEventListener (MouseEvent.MOUSE_UP, upHandler); function downHandler (Ereignis: MouseEvent) trace ("Down");  function upHandler (event: MouseEvent) trace ("Up"); 

Wir verwenden zwei Ereignisse, nämlich MouseEvent.MOUSE_DOWN und MouseEvent.MOUSE_UP. Das erste Ereignis ist das Ereignis, wenn die Maus die primäre Maustaste drückt und hält Nieder. Wenn die Person diese Schaltfläche freigibt, tritt das Ereignis MouseEvent.MOUSE_UP auf. Die Maustaste geht oben nach dem freigeben.

Jetzt können wir anstelle von zwei Handlern (nämlich DownHandler und UpHandler) nur ein Handler. Entfernen Sie den Code, den wir geschrieben haben, und geben Sie Folgendes ein:

 stage.addEventListener (MouseEvent.MOUSE_DOWN, Handler); stage.addEventListener (MouseEvent.MOUSE_UP, Handler); Funktionshandler (Ereignis: MouseEvent) trace ("Etwas ist aufgetreten ..."); 

Okay, wir haben unseren Handler eingerichtet und es funktioniert, aber wir möchten, dass unser Handler etwas bestimmtes tut, abhängig davon, welches Ereignis an den Handler übergeben wird. Glücklicherweise können wir verwenden event.type. Lass es uns benutzen!

 stage.addEventListener (MouseEvent.MOUSE_DOWN, Handler); stage.addEventListener (MouseEvent.MOUSE_UP, Handler); Funktionshandler (Ereignis: MouseEvent) if (event.type == "mouseDown") trace ("Down");  else trace ("Up"); 

Schritt 11: Ereignisablauf

Nehmen wir jetzt an, dass ein Klick auf einen Movieclip geschieht. Nennen wir ihn mcA. Die Veranstaltung wird nicht einfach bei mcA abgesetzt, nein, die Veranstaltung wird durch den gesamten Spieler geleitet. Dieses Reisen nennt man das Ereignisfluss, Denken Sie nur daran, wie das Ereignis durch den Spieler fließt.

Die Veranstaltung beginnt auf der obersten Ebene im Bühne, danach geht es durch das Eltern von mcA, bis die Veranstaltung mcA erreicht. Danach wird die Veranstaltung vom MCA auf die Bühne zurückblasen.

Ok, cool, aber wozu kann ich das nutzen? Da wir jetzt wissen, dass eine Veranstaltung alle Eltern des Dispatchers durchläuft, können wir sie einfach nutzen ein Ereignis-Listener, um die Ereignisse von mehr als einem Objekt zu verfolgen.

Schritt 12: Mehrere Objekte, ein Ereignis-Listener

Okay, lassen Sie uns mehrere Filmclips ineinander erstellen. Sie können dies selbst tun oder einfach die mitgelieferte step-11.fla-Datei verwenden.

Wir erstellen 3 Filmclips und geben ihnen die Instanznamen redMC, blueMC und greenMC. Platzieren Sie all dies anschließend in einem größeren Movieclip mit dem Namen Container.

Jetzt fangen wir an, Code zu schreiben. Ich habe bereits eine Ebene mit dem Namen erstellt Aktionen, Schreiben Sie also Ihren Code in diese Ebene. Zuerst fügen wir einen Ereignis-Listener hinzu Container, der Veranstaltung zuhören MouseEvent.CLICK, mit dem benannten Handler clickHandler.

 container.addEventListener (MouseEvent.CLICK, clickHandler); function clickHandler (Ereignis: MouseEvent) // Funktionskörper

Wir möchten wissen, welche Schaltfläche angeklickt wird. Warum haben wir dem Container einen Ereignis-Listener hinzugefügt? Schauen Sie sich das Bild unten an:

Wie Sie sehen, wird das Ereignis bei redMC abgesetzt, jedoch Blase zurück zum Container. Dann hört der Ereignis-Listener, der zu Container hinzugefügt wurde, das Ereignis und ruft die Listener-Funktion clickHandler auf. Dasselbe passiert mit blueMC und greenMC.

Jetzt verwenden wir event.target, da event.target der Event-Dispatcher ist und der Event-Dispatcher redMC ist. Wie können wir event.target verwenden? Wir können nach event.target.name suchen, das den Instanznamen als String zurückgibt. Wir können also normal verwenden ob Aussagen:

 container.addEventListener (MouseEvent.CLICK, clickHandler); Funktion clickHandler (Ereignis: MouseEvent) if (event.target.name == "redMC") trace ("Red");  if (event.target.name == "blueMC") trace ("Blue");  if (event.target.name == "greenMC") trace ("Grün"); 

Schritt 13: Oft verwendete Ereignisse

Nun haben Sie ein gutes Verständnis für das Ereignis-Framework. Um jedoch etwas zu erreichen, ist es wichtig zu wissen, welches Ereignis verwendet werden soll. Ein guter Ort, um zu überprüfen, welche Ereignisse vorhanden sind, ist das Referenzhandbuch für ActionScript 3.0. Klicken Sie einfach auf ein Ereignis, das eine Klasse wie MouseEvent enthält, und sehen Sie sich an, was jedes Ereignis ist.

Schritt 14: MouseEvent.MOUSE_MOVE

Dieses Ereignis tritt auf, wenn der Benutzer die Maus bewegt. Wenn Sie einen Ereignis-Listener hinzufügen, der sich dieses Ereignis anhört, beispielsweise auf einem Movieclip namens myMC, wissen Sie, wann sich der Mauszeiger über myMC bewegt.

 myMC.addEventListener (MouseEvent.MOUSE_MOVE, mouseMoveHandler); function mouseMoveHandler (event: MouseEvent) trace ("Ihre Maus bewegt sich über myMC"); 

Schritt 15: MouseEvent.MOUSE_OVER

Dieses Ereignis tritt auf, wenn der Benutzer sich bewegt (schwebt). Dieses Ereignis tritt nur auf, wenn der Benutzer den Cursor von einer anderen Stelle über das Objekt bewegt. Das Bewegen der Maus über das Objekt ist dann nicht mehr das Ereignis MouseEvent.MOUSE_OVER, sondern das Ereignis MouseEvent.MOUSE_MOVE.

 myMC.addEventListener (MouseEvent.MOUSE_OVER, overHandler); function overHandler (event: MouseEvent) trace ("Sie haben gerade die Maus auf myMC bewegt"); 

Schritt 16: MouseEvent.MOUSE_OUT

Dieses Ereignis ist genau das Gegenteil von MouseEvent.MOUSE_OVER. Dies ist der Fall, wenn der Cursor des Benutzers das Objekt verlässt oder wenn er (die Jungs, die AS3 erstellt haben) es aus dem Objekt heraus aufrufen.

 myMC.addEventListener (MouseEvent.MOUSE_OUT, outHandler); function outHandler (event: MouseEvent) trace ("Sie haben die Maus gerade aus myMC herausgefahren"); 

Schritt 17: MouseEvent.MOUSE_DOWN

Dieses Ereignis tritt auf, wenn der Benutzer die primäre Maus gedrückt hält, während er gedrückt gehalten wird.

 myMC.addEventListener (MouseEvent.MOUSE_DOWN, downHandler); function downHandler (event: MouseEvent) trace ("Die primäre Maustaste wird auf myMC gedrückt"); 

Schritt 18: MouseEvent.MOUSE_UP

Dieses Ereignis ist genau das Gegenteil von MouseEvent.MOUSE_DOWN. Wenn der Benutzer die primäre Maustaste loslässt, tritt das Ereignis MouseEvent.MOUSE_UP auf.

 myMC.addEventListener (MouseEvent.MOUSE_UP, upHandler); function upHandler (Ereignis: MouseEvent) trace ("Die primäre Maustaste wurde losgelassen, während sie über myMC schwebte"); 

Schritt 19: MouseEvent.CLICK

Nun, der Name macht bereits deutlich, wann dieses Ereignis eintritt. Dieses Ereignis tritt auf, wenn der Benutzer (mit der primären Maustaste) klickt..

 myMC.addEventListener (MouseEvent.CLICK, clickHandler); Funktion clickHandler (Ereignis: MouseEvent) trace ("Sie haben gerade auf myMC geklickt"); 

Schritt 20: MouseEvent.DOUBLE_CLICK

Dieses Ereignis tritt auf, wenn der Benutzer zweimal klickt (mit der primären Maustaste). Beachten Sie, dass MouseEvent.DOUBLE_CLICK das zweite Mal auftritt, wenn MouseEvent.DOUBLE_CLICK auftritt.

 myMC.addEventListener (MouseEvent.DOUBLE_CLICK, doubleClickHandler); function doubleClickHandler (event: MouseEvent) trace ("Sie haben nur auf myMC geklickt"); 

Wenn Sie jetzt Ihren Film testen und doppelklicken, passiert nichts. Warum? Standardmäßig haben Movieclips (und fast alle Anzeigeobjekte) die Eigenschaft doubleClickEnabled auf false gesetzt. MouseEvent.DOUBLE_CLICK wird also nicht gesendet. Setzen Sie es einfach auf "true" und alles wird gut funktionieren.

 myMC.addEventListener (MouseEvent.DOUBLE_CLICK, doubleClickHandler); function doubleClickHandler (event: MouseEvent) trace ("Sie haben nur auf myMC geklickt");  myMC.doubleClickEnabled = true;

Schritt 21: Event.ENTER_FRAME

Dieses Ereignis tritt jedes Mal auf, wenn das Objekt in einen neuen Frame eintritt (ja, das hört sich etwas komisch an). Grundsätzlich tritt dieses Ereignis mit der Rate der Framerate auf. Das heißt, wenn Ihr Film eine Framerate von 30 Bildern pro Sekunde hat, wird das Ereignis 30 Mal pro Sekunde aufgerufen. Wofür würdest du diese Veranstaltung nutzen? Sie können dieses Ereignis verwenden, um die Dinge schrittweise umzusetzen. Beispielsweise können Sie die x-Koordinate eines Objekts um die Rate der Bildrate um 5 erhöhen.

 myMC.addEventListener (Event.ENTER_FRAME, enterFrameHandler); function enterFrameHandler (event: Event) myMC.x + = 5; 

Schritt 22: Event.COMPLETE

Dieses Ereignis tritt ein, wenn das Objekt das abgeschlossen hat, was es gerade getan hat. Meistens verwenden Sie es für Dinge, die etwas laden müssen, oder für Dinge, die irgendeine Form von Medien spielen. Nachdem der URLLoader das Laden abgeschlossen hat, lädt ein URLLoader eine URLRequest. Anschließend werden diese Daten in einen anderen Loader geladen und der Loader anschließend der Bühne hinzugefügt.

 var myURLRequest: URLRequest = neue URLRequest ("http://farm3.static.flickr.com/2382/1616598266_bafebf0086_o.jpg"); var myURLLoader: URLLoader = neuer URLLoader (myURLRequest); myURLLoader.dataFormat = URLLoaderDataFormat.BINARY; myURLLoader.addEventListener (Event.COMPLETE, completeHandler); Funktion completeHandler (Ereignis: Ereignis) var loader: Loader = new Loader (); loader.loadBytes (myURLLoader.data); addChild (loader); 

Schritt 23: Event.RESIZE

Dieses Ereignis tritt auf, wenn die Größe des Flash-Players oder der Seite, auf der sich der Blitz befindet, geändert wird. Sie können dieses Ereignis verwenden, um Objekte nach der Größenänderung neu zu positionieren.

 stage.addEventListener (Event.RESIZE, resizeHandler); function resizeHandler (event: Event) trace ("Die Dimensionen der Bühne sind" + stage.stageWidth + "x" + stage.stageHeight); 

Schritt 24: KeyboardEvent.KEY_DOWN

Dieses Ereignis tritt ein, wenn irgendein Taste auf der Tastatur gedrückt.

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) trace ("Sie haben gerade eine Taste gedrückt!"); 

Schritt 25: KeyboardEvent.KEY_UP

Dieses Ereignis ist genau das Gegenteil von KeyboardEvent.KEY_DOWN. Dieses Ereignis tritt ein, wenn irgendein Taste wird losgelassen (die Taste geht nach oben).

 stage.addEventListener (KeyboardEvent.KEY_UP, keyUpHandler); function keyUpHandler (event: KeyboardEvent) trace ("Sie haben gerade eine Taste losgelassen"); 

Schritt 26: Verwenden der eingebauten Key Booleans

Natürlich ist es ziemlich nutzlos, darauf zu antworten irgendein Schlüssel (außer für einen Bildschirmschoner), so dass Informationen abgerufen werden müssen, welche Taste gedrückt wurde. Glücklicherweise sind einige der Tasten in die Klasse KeyboardEvent integriert. Diese sind boolesche Werte und werden auf true gesetzt, wenn sie gedrückt werden. Diese eingebauten Booleschen sind:

  • KeyboardEvent.altKey, ist dies auf true gesetzt, wenn die Alt-Taste gedrückt wird.
  • KeyboardEvent.commandKey, wird auf true gesetzt, wenn die Befehlstaste gedrückt wird (nur AIR).
  • KeyboardEvent.controlKey, wird auf true gesetzt, wenn die Steuertaste (Strg) gedrückt wird (nur AIR).
  • KeyboardEvent.ctrlKey, ist dies auf true gesetzt, wenn die Steuertaste (Strg) unter Windows gedrückt wird. Unter Mac ist die Strg-Taste jedoch wahr, wenn die Cmd-Taste gedrückt wird.
  • KeyboardEvent.shiftKey, wird auf true gesetzt, wenn die Umschalttaste gedrückt wird.

Jetzt können wir dies verwenden, um genauer zu definieren, welche Taste gedrückt werden muss, bevor wir etwas tun.

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) if (event.shiftKey) trace ("Sie haben gerade die Umschalttaste gedrückt"); 

Schritt 27: Verwenden von Schlüsselcodes

Sie fragen sich vielleicht, okay, was ist mit all den anderen Schlüsseln? Nun, da gibt es etwas namens Schlüsselcode. Jeder Schlüssel hat eine bestimmte Nummer; ein Schlüsselcode. Wir können den Schlüsselcode des Schlüssels überprüfen, der das Ereignis ausgelöst hat. Dies geschieht mit event.keyCode, das eine Ganzzahl zurückgibt. Klicken Sie hier, um eine Liste der Schlüsselcodes anzuzeigen. Obwohl es sich um Javascript handelt, sind die Schlüsselcodes die gleichen.

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) if (event.keyCode == 65) trace ("Sie haben gerade die A-Taste gedrückt"); 

Jetzt ist es einfacher, die Schlüsselcodes in einer Variablen zu speichern (oder, wenn Sie hardcore sind, in einer Klasse) und diese Variable statt des Schlüsselcodes zu verwenden.

 var A: uint = 65; stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (Ereignis: KeyboardEvent) if (event.keyCode == A) trace ("Sie haben gerade die A-Taste gedrückt"); 

Schritt 28: Zeichencodes verwenden

Mit den Tastencodes können Sie eine ganze Menge erledigen, es ist jedoch manchmal nicht das, was Sie brauchen. Zum Beispiel wird derselbe Schlüssel für die Zeichen verwendet ein und EIN. Aber wir möchten immer noch zwischen diesen beiden unterscheiden. Nun, das Ereignis trägt den Zeichencode des Ereignisverteilers.

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) trace (event.charCode); 

Okay, das funktioniert, aber müssen wir uns dann an diese Zeichencodes erinnern? Glücklicherweise können wir die Funktion charCodeAt () verwenden, die den Zeichencode eines Zeichens (in einem String) zurückgibt. charCodeAt () nimmt standardmäßig das erste Zeichen aus der Zeichenfolge. charCodeAt (0) ist das erste Zeichen, charCodeAt (1) das zweite Zeichen usw..

 stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) if (event.charCode == String ("a"). charCodeAt ()) trace ("Sie haben gerade eine Taste gedrückt"); 

Schritt 29: Fokus

Versuchen Sie nun folgendes einzugeben:

 myMC.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler); function keyDownHandler (event: KeyboardEvent) trace ("Sie haben gerade eine Taste gedrückt, während Sie sich auf myMC konzentrieren"); 

Testen Sie dies, es funktioniert nicht! Warum? Wenn es sich bei myMC um einen Movieclip handelt, werden keine Tastatureingaben akzeptiert. Daher werden Tastaturereignisse bei Movieclips nicht ausgelöst. Wenn Sie möchten, dass myMC reagiert, fügen Sie den Event-Listener der Bühne hinzu und lassen Sie dann myMC etwas unternehmen. Versuchen Sie, myMC von einem Movieclip in ein dynamisches Textfeld zu ändern. Dann wird es funktionieren.

Was ist mit zwei dynamischen Textfeldern? Wenn der Benutzer eingibt, senden beide Textfelder ein Ereignis aus? Nein, nur die, die Sie eingeben. Dies wird aufgerufen Fokus. Tastaturereignisse werden von dem Objekt ausgelöst, das den Fokus hat. Die Bühne ist das einzige Objekt, das noch den Fokus hat, während ein anderes Objekt auch den Fokus hat.

Schritt 30: TimerEvent.TIMER

Diese Veranstaltung wurde speziell für Timer entwickelt. Es wird zu einem Timer abgesetzt, der gerade die Verzögerungszeit erreicht hat. Dies bedeutet, dass Sie dieses Ereignis verwenden können, um in festgelegten Zeitabständen sehr genau etwas zu tun.

 var myTimer: Timer = neuer Timer (1000, 5); myTimer.start (); myTimer.addEventListener (TimerEvent.TIMER, timerHandler); function timerHandler (event: TimerEvent) trace ("eine Sekunde später ..."); 

Schritt 31: TimerEvent.TIMER_COMPLETE

Alle Timer haben einen optionalen zweiten Parameter. Dieser Parameter legt die Wiederholungsanzahl des Timers fest. Das heißt, wenn der Timer die Verzögerungszeit erreicht, startet er erneut. Wenn der Timer so oft wiederholt wurde, wie er wiederholt wurde, wird das Ereignis TimerEvent.TIMER_COMPLETE ausgelöst.

 var myTimer: Timer = neuer Timer (1000, 5); myTimer.start (); myTimer.addEventListener (TimerEvent.TIMER_COMPLETE, timerHandler); function timerHandler (Ereignis: TimerEvent) trace ("Der Timer wurde fünfmal wiederholt"); 

Fazit

Das war's! Ich hoffe, Sie haben jetzt ein umfassendes Verständnis für das Ereignis-Framework von ActionScript 3.0. Stellen Sie fest, dass es sich bei den besprochenen Ereignissen nicht nur um Ereignisse handelt, sondern nur um die, die ich oft benutze. Vergessen Sie nicht, immer die Sprach- und Komponentenreferenzen zu überprüfen, es kann Ihnen sehr helfen! Es war mir eine Freude, euch zu schreiben!