Erfahren Sie, wie Sie in ActionScript 3.0 Tastencodes verwenden, um zu erkennen, wann der Benutzer eine bestimmte Taste drückt.
Werfen wir einen Blick auf das Endergebnis, auf das wir hinarbeiten:
Testen Sie die Antworten, indem Sie die Tasten auf Ihrer Tastatur drücken ...
Öffnen Sie ein neues Flash-Dokument. Fügen Sie links statische Textfelder hinzu, die die Namen der zu erkennenden Schlüssel enthalten, und dynamische Textfelder mit dem Text "Nein".
Geben Sie Ihren dynamischen Textfeldern Instanznamen mit dem folgenden Format: "Schlüsselname_txt
". Meine sind ctrl_txt
, shift_txt
, left_txt
, up_txt
, right_txt
, down_txt
und Leerzeichen
beziehungsweise.
Gehen Datei〉 Neu
und wählen Sie Actionscript-Datei
.
Richten Sie nun die Basisdokumentklasse so ein: (Wenn Sie mehr über Dokumentklassen erfahren möchten, lesen Sie Michaels Quick Tip.)
package import flash.display.MovieClip; public class KeyCodes erweitert MovieClip öffentliche Funktion KeyCodes ()
Um zu erkennen, wenn der Benutzer mit AS3 eine Taste drückt, müssen Ereignis-Listener hinzugefügt werden, die auf einen Benutzer warten, der Tasten drückt und loslässt. Wir können dies tun, indem Sie den folgenden Code in unser einfügen Schlüsselcodes ()
Konstruktorfunktion:
public function KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Hinzufügen eines Ereignis-Listeners zu der Stufe, die auf eine gedrückte Taste wartet stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Hinzufügen eines Ereignis-Listeners zu der Bühne, die auf einen freigegebenen Schlüssel wartet
Bevor wir fortfahren, müssen wir eine Codezeile hinzufügen, um das zu importieren KeyboardEvent
. Fügen Sie diese Codezeile unten ein, wo wir das importieren Filmausschnitt
Klasse in Zeile 3:
package import flash.display.MovieClip; import flash.events.KeyboardEvent;
Unter unseren Hörern fügen Sie zwei Funktionen hinzu, die aufgerufen werden, wenn der Benutzer eine Taste drückt oder freigibt:
public function KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Hinzufügen eines Ereignis-Listeners zu der Stufe, die auf eine gedrückte Taste wartet stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Hinzufügen eines Ereignis-Listeners zu der Bühne, die auf einen freigegebenen Schlüssel wartet Funktion onKeyPress (e: KeyboardEvent): void Funktion onKeyRelease (e: KeyboardEvent): void
Jetzt können wir eine hinzufügen Spur()
Bei jeder Funktion wird beim Drücken einer Taste "Taste gedrückt" in das Ausgabefeld und "Taste losgelassen" nach Loslassen der Taste angezeigt. Dazu können wir den folgenden Code in unsere Funktionen einfügen:
public function KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Hinzufügen eines Ereignis-Listeners zu der Stufe, die auf eine gedrückte Taste wartet stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Füge einen Event-Listener der Bühne hinzu, die auf einen freigegebenen Schlüssel wartet. Function onKeyPress (e: KeyboardEvent): void trace ("Taste gedrückt"); function onKeyRelease (e: KeyboardEvent): void trace ("Schlüssel freigegeben");
Testen Sie Ihren Film (Strg + Eingabetaste). Wenn Sie eine Taste drücken, sollte sie in Ihrem Ausgabefeld "Taste gedrückt" und beim Loslassen der Taste "Taste losgelassen" nachverfolgen.
Sie können feststellen, welche Taste gedrückt wurde, indem Sie den Schlüsselcode nachverfolgen. Ändern Sie Ihre Spur von Trace ("Taste gedrückt")
zu trace (e.keyCode)
und entfernen Sie die freigegebene Spur des Schlüssels. Ihr Code sollte jetzt so aussehen:
public function KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Hinzufügen eines Ereignis-Listeners zu der Stufe, die auf eine gedrückte Taste wartet stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Hinzufügen eines Ereignis-Listeners zu der Bühne, die auf einen freigegebenen Schlüssel wartet Funktion onKeyPress (e: KeyboardEvent): void trace (e.keyCode); Funktion onKeyRelease (e: KeyboardEvent): void
Wenn Sie jetzt eine Taste drücken, wird der Code ermittelt, der sich auf diese bestimmte Taste bezieht. Wenn ich den Linkspfeil drücke, wird es verfolgt 37
in das Ausgabefeld und die Leertaste wird verfolgt 32
.
Mit diesen Informationen sind Sie buchstäblich an Ihren Fingerspitzen und können verschiedene Ereignisse für verschiedene Schlüssel mit einem Ereignis-Listener ausführen. Fügen Sie der Funktion diesen Code hinzu und sehen Sie, was passiert, wenn Sie die Leertaste drücken:
Funktion onKeyPress (e: KeyboardEvent): void trace (e.keyCode); if (e.keyCode == 32) // Wenn der Schlüsselcode gleich 32 ist (Leertaste) trace ("Leertaste gedrückt");
Wenn Sie jetzt die Leertaste drücken, wird nicht nur die Spur 32 herausgefahren, sondern auch die Leertaste gedrückt. Sie können dies verwenden, um mit einer einzigen Funktion viele verschiedene Tasten separat zu behandeln.
Fahren Sie fort und löschen Sie die Ablaufverfolgung innerhalb der "if" -Anweisung. Ersetzen Sie es mit diesem:
Funktion onKeyPress (e: KeyboardEvent): void trace (e.keyCode); if (e.keyCode == 32) // Wenn der Schlüsselcode gleich 32 ist (Leertaste), space_txt.text = "Yes"; // Ändern Sie das Textfeld der Leertaste in "Ja"
Wenn Sie jetzt die Leertaste drücken, sollte sich die Beschriftung der Leertaste von "Nein" in "Ja" ändern..
Tun Sie dies für alle Tasten mit Ausnahme von Control und Shift, da sie auf besondere Weise erkannt werden können.
Funktion onKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 ist der Schlüsselcode für den linken Pfeil left_txt.text = "Yes"; if (e.keyCode == 38) // 38 ist der Schlüsselcode für den Aufwärtspfeil. up_txt.text = "Yes"; if (e.keyCode == 39) // 39 ist der Schlüsselcode für den Rechtspfeil right_txt.text = "Yes"; if (e.keyCode == 40) // 40 ist der Schlüsselcode für den Abwärtspfeil down_txt.text = "Yes"; if (e.keyCode == 32) // 32 ist Schlüsselcode für die Leertaste space_txt.text = "Yes";
Wie erkennen wir, ob die Steuerungs- oder Umschalttaste gedrückt wird? Jeder hat eine einfache eingebaute Variable, die automatisch geändert wird, wenn die Tasten gedrückt werden. Sie können sie anhand des folgenden Codes erkennen. Fügen Sie diesen Code unter den anderen "if" -Anweisungen in ein onKeyPress ()
.
if (e.ctrlKey == true) ctrl_txt.text = "Ja"; if (e.shiftKey == true) shift_txt.text = "Ja";
Hinweis: Es gibt auch alt "Taste
, Dadurch wird erkannt, ob die Alt-Taste gedrückt wird. Dies funktioniert nur in Adobe AIR-Anwendungen, da das Drücken von alt während der Fokus in einer Flash-Datei fast immer von der SWF-Datei aus fokussiert wird und daher nicht funktioniert.
Um die Freigabefunktion zu erstellen, müssen Sie nur den Code in die kopieren onKeyPress ()
Funktion und nur ein paar Dinge ändern.
Wir müssen den gesamten Text in "Nein" anstelle von "Ja" ändern und prüfen, ob ctrlKey
und shift Taste
sind falsch
nicht wahr
. So sollte der endgültige Code aussehen:
package import flash.display.MovieClip; import flash.events.KeyboardEvent; public class KeyCodes erweitert MovieClip public function KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Hinzufügen eines Ereignis-Listeners zu der Stufe, die auf eine gedrückte Taste wartet stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Hinzufügen eines Ereignis-Listeners zu der Bühne, die auf einen freigegebenen Schlüssel wartet Funktion onKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 ist der Schlüsselcode für den linken Pfeil left_txt.text = "Yes "; if (e.keyCode == 38) // 38 ist der Schlüsselcode für den Aufwärtspfeil. up_txt.text = "Yes"; if (e.keyCode == 39) // 39 ist der Schlüsselcode für den Rechtspfeil right_txt.text = "Yes"; if (e.keyCode == 40) // 40 ist der Schlüsselcode für den Abwärtspfeil down_txt.text = "Yes"; if (e.keyCode == 32) // 32 ist Schlüsselcode für die Leertaste space_txt.text = "Yes"; if (e.ctrlKey == true) ctrl_txt.text = "Ja"; if (e.shiftKey == true) shift_txt.text = "Ja"; Funktion onKeyRelease (e: KeyboardEvent): void if (e.keyCode == 37) // 37 ist der Schlüsselcode für den linken Pfeil left_txt.text = "No"; if (e.keyCode == 38) // 38 ist der Schlüsselcode für den Aufwärtspfeil. up_txt.text = "Nein"; if (e.keyCode == 39) // 39 ist der Schlüsselcode für den Rechtspfeil right_txt.text = "No"; if (e.keyCode == 40) // 40 ist der Schlüsselcode für den Abwärtspfeil down_txt.text = "No"; if (e.keyCode == 32) // 32 ist Schlüsselcode für die Leertaste space_txt.text = "No"; if (e.ctrlKey == false) ctrl_txt.text = "Nein"; if (e.shiftKey == false) shift_txt.text = "Nein";
Wenn Sie die Funktionen innerhalb des Konstruktors deklarieren, bedeutet dies, dass beim Entfernen der Ereignis-Listener Müll gesammelt wird. Wenn Sie möchten, dass dies nicht der Fall ist, können Sie sie als Methoden deklarieren:
package import flash.display.MovieClip; import flash.events.KeyboardEvent; public class KeyCodes erweitert MovieClip public function KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Hinzufügen eines Ereignis-Listeners zu der Stufe, die auf eine gedrückte Taste wartet stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Füge einen Ereignis-Listener zu der Bühne hinzu, die auf einen freigegebenen Schlüssel wartet öffentliche Funktion onKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 ist der Schlüsselcode für den linken Pfeil left_txt.text = "Ja"; if (e.keyCode == 38) // 38 ist der Schlüsselcode für den Aufwärtspfeil. up_txt.text = "Yes"; if (e.keyCode == 39) // 39 ist der Schlüsselcode für den Rechtspfeil right_txt.text = "Yes"; if (e.keyCode == 40) // 40 ist der Schlüsselcode für den Abwärtspfeil down_txt.text = "Yes"; if (e.keyCode == 32) // 32 ist Schlüsselcode für die Leertaste space_txt.text = "Yes"; if (e.ctrlKey == true) ctrl_txt.text = "Ja"; if (e.shiftKey == true) shift_txt.text = "Ja"; public function onKeyRelease (e: KeyboardEvent): void if (e.keyCode == 37) // 37 ist der Schlüsselcode für den Linkspfeil left_txt.text = "No"; if (e.keyCode == 38) // 38 ist der Schlüsselcode für den Aufwärtspfeil. up_txt.text = "Nein"; if (e.keyCode == 39) // 39 ist der Schlüsselcode für den Rechtspfeil right_txt.text = "No"; if (e.keyCode == 40) // 40 ist der Schlüsselcode für den Abwärtspfeil down_txt.text = "No"; if (e.keyCode == 32) // 32 ist Schlüsselcode für die Leertaste space_txt.text = "No"; if (e.ctrlKey == false) ctrl_txt.text = "Nein"; if (e.shiftKey == false) shift_txt.text = "Nein";
Testen Sie Ihren Film und alles sollte gut sein! Wenn Sie irgendwelche Kommentare oder Probleme haben, veröffentlichen Sie sie einfach in den Kommentaren und ich (oder jemand anderes) werde Ihre Frage beantworten.
Vielen Dank für das Lesen und ich hoffe, es hat Ihnen geholfen, mehr über Tastendrücke in Flash zu erfahren.