Aflați cum să utilizați codurile cheie în ActionScript 3.0 pentru a detecta când utilizatorul apasă o anumită cheie.
Să aruncăm o privire asupra rezultatului final pe care îl vom strădui:
Testați răspunsurile apăsând tastele de pe tastatură ...
Deschideți un nou document Flash. Adăugați casete de text statice în partea stângă, care au numele cheilor pe care le veți detecta și cutiile de text dinamice cu textul "Nu" în interiorul lor.
Dați denumirile instanțelor dvs. de casete dinamice cu următorul format: "keyname_txt
"Sunt al meu ctrl_txt
, shift_txt
, left_txt
, up_txt
, right_txt
, down_txt
și space_text
respectiv.
Merge Fișier> Nou
și selectați Fișierul Actionscript
.
Acum configurați clasa de documente de bază astfel: (Dacă doriți să aflați despre clasele de documente citiți Sfat rapid al lui Michael)
pachet import flash.display.MovieClip; clasa publică KeyCodes extinde MovieClip funcția publică KeyCodes ()
Pentru a detecta când utilizatorul apasă o cheie cu AS3, trebuie să adăugăm ascultători de evenimente care asculta pentru un utilizator care apasă și eliberează cheile. Putem face acest lucru prin adăugarea următoarei bucăți de cod în interiorul nostru Keycodes ()
funcția constructor:
funcția publică KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Adăugați un ascultător al evenimentului pe scena care ascultă pentru o cheie care este apăsată stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Adăugați un ascultător al evenimentului pe scena care ascultă pentru eliberarea unei chei
Înainte de a continua, trebuie să adăugăm o linie de cod pentru a importa KeyboardEvent
. Adăugați acest rând de cod de mai jos unde importem MovieClip
clasa pe linia 3:
pachet import flash.display.MovieClip; import flash.events.KeyboardEvent;
Sub ascultătorii noștri se adaugă două funcții care vor fi apelate când utilizatorul apasă sau eliberează o cheie:
funcția publică KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Adăugați un ascultător al evenimentului pe scena care ascultă pentru o cheie care este apăsată stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Adăugați un ascultător al evenimentului pe scena care asculta pentru o funcție de eliberare a unei chei peKeyPress (e: KeyboardEvent): void funcția onKeyRelease (e: KeyboardEvent): void
Acum putem adăuga a urmă()
la fiecare funcție, atunci când apăsați o tastă, urmăriți "tasta apăsată" în panoul de ieșire și tasta "eliberată" când cheia este eliberată. Pentru a face acest lucru putem adăuga următorul cod în funcțiile noastre:
funcția publică KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Adăugați un ascultător al evenimentului pe scena care ascultă pentru o cheie care este apăsată stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Adăugați un ascultător al evenimentului pe scena care asculta pentru o funcție eliberată pe tastaKeyPress (e: KeyboardEvent): void trace ("apăsat"); funcția onKeyRelease (e: KeyboardEvent): void trace ("key released");
Testați-vă filmul (Ctrl + Enter). Când apăsați o tastă, ar trebui să urmăriți "tasta apăsată" în panoul de ieșire și "cheia eliberată" când o eliberați.
Puteți detecta ce tastă a fost apăsată prin urmărirea codului cheie. Schimbați urmărirea urmări ("apăsat")
la trace (e.keyCode)
și eliminați următoarea trasă. Codul dvs. ar trebui să arate astfel:
funcția publică KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Adăugați un ascultător al evenimentului pe scena care ascultă pentru o cheie care este apăsată stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Adăugați un ascultător al evenimentului pe scena care asculta pentru o funcție de eliberare a cheii peKeyPress (e: KeyboardEvent): void trace (e.keyCode); funcția onKeyRelease (e: KeyboardEvent): void
Acum, când apăsați o tastă, va fi urmărită codul care se referă la acea cheie specifică. Dacă apăs pe săgeata din stânga, va fi urmărită 37
în panoul de ieșire și bara de spațiu vor fi urmărite 32
.
Cu aceste informații literalmente la îndemâna dvs. puteți executa diferite evenimente pentru diferite chei, toate cu un singur ascultător de evenimente. Încercați să adăugați acest cod la funcția dvs. și să vedeți ce se întâmplă atunci când apăsați bara de spațiu:
funcția onKeyPress (e: KeyboardEvent): void trace (e.keyCode); dacă (e.keyCode == 32) // Dacă codul cheie este egal cu 32 (bara de spațiu) trace ("bara de spațiu apăsată");
Acum, dacă apăsați bara de spațiu, nu veți urmări doar 32, va fi urmărită "bara de spațiu apăsată". Puteți utiliza acest lucru pentru a trata mai multe chei diferite separat în cadrul aceleiași funcții.
Mergeți mai departe și ștergeți urmă în interiorul instrucțiunii "if". Înlocuiți-l cu acesta:
funcția onKeyPress (e: KeyboardEvent): void trace (e.keyCode); dacă (e.keyCode == 32) // Dacă codul cheie este egal cu 32 (spațiu) space_txt.text = "Da"; // Schimbați caseta text a barei de spațiu în "Da"
Acum, când apăsați bara de spațiu, ar trebui să vedeți schimbarea etichetei barei de spațiu de la "Nu" la "Da".
Faceți acest lucru pentru toate cheile, cu excepția comenzii și a schimbării, deoarece acestea au modalități speciale de a fi detectate.
funcția onKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 este codul cheie pentru săgeata stânga left_txt.text = "Da"; dacă (e.keyCode == 38) // 38 este codul cheie pentru săgeata sus up_txt.text = "Da"; dacă (e.keyCode == 39) // 39 este codul cheie pentru săgeata dreapta right_txt.text = "Da"; dacă (e.keyCode == 40) // 40 este codul cheie pentru săgeata în jos down_txt.text = "Da"; dacă (e.keyCode == 32) // 32 este codul cheie pentru spațiul de spațiu space_txt.text = "Da";
Cum detectăm dacă butoanele de comandă sau schimbare sunt apăsate? Fiecare are o variabilă ușor de încorporat, care se schimbă automat atunci când tastele sunt apăsate. Le puteți detecta utilizând următorul cod. Puneți acest cod sub celelalte instrucțiuni "if" în onkeypress ()
.
dacă (e.ctrlKey == true) ctrl_txt.text = "Da"; dacă (e.shiftKey == true) shift_txt.text = "Da";
Notă: există deasemenea altKey
, care va detecta dacă tasta alt este apăsată. Acest lucru va funcționa numai în aplicațiile Adobe AIR ca apăsând altul, în timp ce focalizarea într-un fișier Flash va fi aproape întotdeauna focalizată din SWF și, prin urmare, nu funcționează.
Pentru a crea funcția de lansare tot ce trebuie să faceți este să copiați codul în interiorul onkeypress ()
funcția și schimba doar câteva lucruri.
Trebuie să schimbăm tot textul pentru a spune "Nu" în loc de "Da" și să verificați dacă ctrlKey
și shiftKey
sunteți fals
nu Adevărat
. Acesta ar trebui să arate codul final:
pachet import flash.display.MovieClip; import flash.events.KeyboardEvent; clasa publica KeyCodes extinde MovieClip functie publica KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Adăugați un ascultător al evenimentului pe scena care ascultă pentru o cheie care este apăsată stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Adăugați un ascultător al evenimentului la etapa care asculta pentru o funcție eliberată pe tastaKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 este codul cheie pentru săgeata stânga left_txt.text = "Da „; dacă (e.keyCode == 38) // 38 este codul cheie pentru săgeata sus up_txt.text = "Da"; dacă (e.keyCode == 39) // 39 este codul cheie pentru săgeata dreapta right_txt.text = "Da"; dacă (e.keyCode == 40) // 40 este codul cheie pentru săgeata în jos down_txt.text = "Da"; dacă (e.keyCode == 32) // 32 este codul cheie pentru spațiul de spațiu space_txt.text = "Da"; dacă (e.ctrlKey == true) ctrl_txt.text = "Da"; dacă (e.shiftKey == true) shift_txt.text = "Da"; onKeyRelease (e: KeyboardEvent): void if (e.keyCode == 37) // 37 este codul cheie pentru săgeata stânga left_txt.text = "Nu"; dacă (e.keyCode == 38) // 38 este codul cheie pentru săgeata în sus up_txt.text = "Nu"; dacă (e.keyCode == 39) // 39 este codul cheie pentru săgeata dreapta right_txt.text = "Nu"; dacă (e.keyCode == 40) // 40 este codul cheie pentru săgeata în jos down_txt.text = "Nu"; dacă (e.keyCode == 32) // 32 este codul cheie pentru spațiul spațial space_txt.text = "Nu"; dacă (e.ctrlKey == false) ctrl_txt.text = "Nu"; dacă (e.shiftKey == false) shift_txt.text = "Nu";
Declarați funcțiile din interiorul constructorului înseamnă că vor fi colectate gunoi în cazul în care ascultătorii evenimentului vor fi eliminați. Dacă preferați să nu se întâmple acest lucru, puteți să-i declarați ca metodă:
pachet import flash.display.MovieClip; import flash.events.KeyboardEvent; clasa publica KeyCodes extinde MovieClip functie publica KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Adăugați un ascultător al evenimentului pe scena care ascultă pentru o cheie care este apăsată stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // adăugați un ascultător al evenimentului la scena care ascultă pentru eliberarea unei chei funcția publică onKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 este codul cheie pentru săgeata stânga left_txt.text = "Da"; dacă (e.keyCode == 38) // 38 este codul cheie pentru săgeata sus up_txt.text = "Da"; dacă (e.keyCode == 39) // 39 este codul cheie pentru săgeata dreapta right_txt.text = "Da"; dacă (e.keyCode == 40) // 40 este codul cheie pentru săgeata în jos down_txt.text = "Da"; dacă (e.keyCode == 32) // 32 este codul cheie pentru spațiul de spațiu space_txt.text = "Da"; dacă (e.ctrlKey == true) ctrl_txt.text = "Da"; dacă (e.shiftKey == true) shift_txt.text = "Da"; funcția publică onKeyRelease (e: KeyboardEvent): void if (e.keyCode == 37) // 37 este codul cheie pentru săgeata stânga left_txt.text = "Nu"; dacă (e.keyCode == 38) // 38 este codul cheie pentru săgeata în sus up_txt.text = "Nu"; dacă (e.keyCode == 39) // 39 este codul cheie pentru săgeata dreapta right_txt.text = "Nu"; dacă (e.keyCode == 40) // 40 este codul cheie pentru săgeata în jos down_txt.text = "Nu"; dacă (e.keyCode == 32) // 32 este codul cheie pentru spațiul spațial space_txt.text = "Nu"; dacă (e.ctrlKey == false) ctrl_txt.text = "Nu"; dacă (e.shiftKey == false) shift_txt.text = "Nu";
Testați-vă filmul și toate ar trebui să fie bine! Dacă aveți comentarii sau probleme, postați-le doar în secțiunea de comentarii și eu (sau altcineva) vă răspundeți la întrebarea dvs..
Vă mulțumim pentru lectură și sper că v-ați ajutat să aflați mai multe despre apăsările cheie din Flash.