Lær hvordan du bruker nøkkelkoder i ActionScript 3.0 for å oppdage når brukeren trykker på en bestemt nøkkel.
La oss se på det endelige resultatet vi vil jobbe for:
Test svarene ved å trykke på tastene på tastaturet ditt ...
Åpne et nytt Flash-dokument. Legg til statiske tekstbokser til venstre som har navnene på tastene du vil oppdage og dynamiske tekstbokser med teksten "Nei" inne i dem.
Gi dine dynamiske tekstbokser forekomstnavn med følgende format: "keyname_txt
". Mine er ctrl_txt
, shift_txt
, left_txt
, up_txt
, right_txt
, down_txt
og space_text
henholdsvis.
Gå Fil> Ny
og velg ActionScript-fil
.
Konfigurer nå grunnleggende dokumentklassen slik: (Hvis du vil lære om dokumentklasser, les Michael's Quick Tip)
pakke import flash.display.MovieClip; offentlig klasse KeyCodes utvider MovieClip offentlig funksjon KeyCodes ()
For å oppdage når brukeren trykker på en tast med AS3, må vi legge til hendelseslyttere som lytter etter at en bruker trykker og slipper taster. Vi kan gjøre dette ved å legge til følgende koden i vår Keycodes ()
konstruktør funksjon:
offentlig funksjon KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Legg til en hendelse lytter til scenen som lytter etter en nøkkel blir presset stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Legg til en hendelselytter til scenen som lytter etter at en nøkkel blir utgitt
Før vi fortsetter må vi legge til en linje med kode for å importere KeyboardEvent
. Legg til denne linjen med kode nedenfor der vi importerer Filmklipp
klasse på linje 3:
pakke import flash.display.MovieClip; importer flash.events.KeyboardEvent;
Under våre lyttere legger du til to funksjoner som vil bli kalt når brukeren enten trykker eller slipper en nøkkel:
offentlig funksjon KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Legg til en hendelse lytter til scenen som lytter etter en nøkkel blir presset stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Legg til en hendelse lytter til scenen som lytter etter en nøkkel blir utgitt funksjon onKeyPress (e: KeyboardEvent): void funksjon onKeyRelease (e: KeyboardEvent): void
Nå kan vi legge til en spor ()
til hver funksjon, så når du trykker på en tast vil den spore "tastetrykket" inn i utgangspanelet og "nøkkel utgitt" når nøkkelen slippes. For å gjøre dette kan vi legge til følgende kode i våre funksjoner:
offentlig funksjon KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Legg til en hendelse lytter til scenen som lytter etter en nøkkel blir presset stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Legg til en hendelse lytter til scenen som lytter etter en nøkkel blir frigitt funksjon onKeyPress (e: KeyboardEvent): void trace ("tastetrykk"); funksjon påKeyRelease (e: KeyboardEvent): void trace ("key released");
Test filmen din (Ctrl + Enter). Når du trykker på en tast, bør den spore "tastetrykket" inn i utgangspanelet og "tasten frigjort" når du slipper den.
Du kan oppdage hvilken tast som er trykket ved å spore nøkkelkoden. Endre sporet ditt fra spor ("tastetrykk")
til spor (e.keyCode)
og fjern nøkkelutgitt spor. Koden din skal nå se slik ut:
offentlig funksjon KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Legg til en hendelse lytter til scenen som lytter etter en nøkkel blir presset stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Legg til en hendelse lytter til scenen som lytter etter en nøkkel blir utgitt funksjon onKeyPress (e: KeyboardEvent): void trace (e.keyCode); funksjon påKeyRelease (e: KeyboardEvent): void
Nå når du trykker på en tast, vil den spore koden som gjelder den spesifikke nøkkelen. Hvis jeg trykker på venstre pil, vil den spore 37
inn i utgangspanelet og mellomromstasten vil spore 32
.
Med denne informasjonen bokstavelig talt, kan du utføre forskjellige hendelser for forskjellige nøkler, alle med en hendelselytter. Prøv å legge til denne koden til funksjonen din og se hva som skjer når du trykker på mellomromstasten:
funksjon onKeyPress (e: KeyboardEvent): void trace (e.keyCode); hvis (e.keyCode == 32) // Hvis nøkkelkoden er lik 32 (mellomromstasten) spor ("mellomrom trykket");
Nå, hvis du trykker på mellomromstasten, vil det ikke bare spore ut 32, det vil spore "mellomrom trykket". Du kan bruke dette til å håndtere mange forskjellige nøkler separat i den ene funksjonen.
Gå videre og slett sporet i "if" -oppgaven. Erstatt det med dette:
funksjon onKeyPress (e: KeyboardEvent): void trace (e.keyCode); hvis (e.keyCode == 32) // Hvis nøkkelkoden er lik 32 (mellomromstasten) space_txt.text = "Yes"; // Endre mellomromstasten til "Ja"
Nå, når du trykker på mellomromstasten, bør du se mellomromstastetiketten endres fra "Nei" til "Ja".
Gjør dette for alle nøklene unntatt kontroll og skift, da de har spesielle måter å bli oppdaget på.
funksjon onKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 er nøkkelkode for venstre pil left_txt.text = "Yes"; hvis (e.keyCode == 38) // 38 er nøkkelkode for pil opp up_txt.text = "Yes"; hvis (e.keyCode == 39) // 39 er nøkkelkode for høyre pil right_txt.text = "Yes"; hvis (e.keyCode == 40) // 40 er nøkkelkode for nedpilen down_txt.text = "Yes"; hvis (e.keyCode == 32) // 32 er nøkkelkode for mellomromstasten space_txt.text = "Yes";
Hvordan oppdager vi om kontroll- eller skiftknappene trykkes? Hver enkelt har en lett innebygd variabel som automatisk endres når tastene trykkes. Du kan oppdage dem ved å bruke følgende kode. Sett denne koden under de andre "om" uttalelsene i onkeypress ()
.
hvis (e.ctrlKey == true) ctrl_txt.text = "Yes"; hvis (e.shiftKey == true) shift_txt.text = "Yes";
Merk: Det er også altKey
, som vil oppdage om alt-tasten er trykket. Dette vil bare fungere i Adobe AIR-programmer som å trykke alt mens fokusert i en Flash-fil, vil nesten alltid ta fokus fra SWF og derfor ikke fungere.
For å skape utgivelsesfunksjonen er alt vi trenger å gjøre, å kopiere koden inne i onkeypress ()
funksjon og bare endre noen ting.
Vi må endre all tekst for å si "Nei" i stedet for "Ja" og sjekk om ctrlKey
og Skift-tast
er falsk
ikke ekte
. Dette er hva den endelige koden skal se ut som:
pakke import flash.display.MovieClip; importer flash.events.KeyboardEvent; offentlig klasse KeyCodes utvider MovieClip offentlig funksjon KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Legg til en hendelse lytter til scenen som lytter etter en nøkkel blir presset stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Legg til en hendelse lytter til scenen som lytter etter en nøkkel blir frigitt funksjon onKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 er nøkkelkode for venstre pil left_txt.text = "Ja "; hvis (e.keyCode == 38) // 38 er nøkkelkode for pil opp up_txt.text = "Yes"; hvis (e.keyCode == 39) // 39 er nøkkelkode for høyre pil right_txt.text = "Yes"; hvis (e.keyCode == 40) // 40 er nøkkelkode for nedpilen down_txt.text = "Yes"; hvis (e.keyCode == 32) // 32 er nøkkelkode for mellomromstasten space_txt.text = "Yes"; hvis (e.ctrlKey == true) ctrl_txt.text = "Yes"; hvis (e.shiftKey == true) shift_txt.text = "Yes"; funksjon påKeyRelease (e: KeyboardEvent): void if (e.keyCode == 37) // 37 er nøkkelkode for venstre pil left_txt.text = "Nei"; hvis (e.keyCode == 38) // 38 er nøkkelkode for pil opp up_txt.text = "Nei"; hvis (e.keyCode == 39) // 39 er nøkkelkode for høyre pil right_txt.text = "Nei"; hvis (e.keyCode == 40) // 40 er nøkkelkode for nedpilen down_txt.text = "Nei"; hvis (e.keyCode == 32) // 32 er nøkkelkode for mellomromstasten space_txt.text = "No"; hvis (e.ctrlKey == false) ctrl_txt.text = "Nei"; hvis (e.shiftKey == false) shift_txt.text = "Nei";
Erklære funksjonene inne i konstruktøren betyr at de vil bli søppel samlet hvis hendelseslytterne fjernes. Hvis du heller ikke dette skjedde, kan du deklarere dem som metoder, slik som:
pakke import flash.display.MovieClip; importer flash.events.KeyboardEvent; offentlig klasse KeyCodes utvider MovieClip offentlig funksjon KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Legg til en hendelse lytter til scenen som lytter etter en nøkkel blir presset stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Legg til en hendelseslytter til scenen som lytter etter at en nøkkel blir utgitt Offentlig funksjon onKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 er nøkkelkode for venstre pil left_txt.text = "Ja"; hvis (e.keyCode == 38) // 38 er nøkkelkode for pil opp up_txt.text = "Yes"; hvis (e.keyCode == 39) // 39 er nøkkelkode for høyre pil right_txt.text = "Yes"; hvis (e.keyCode == 40) // 40 er nøkkelkode for nedpilen down_txt.text = "Yes"; hvis (e.keyCode == 32) // 32 er nøkkelkode for mellomromstasten space_txt.text = "Yes"; hvis (e.ctrlKey == true) ctrl_txt.text = "Yes"; hvis (e.shiftKey == true) shift_txt.text = "Yes"; offentlig funksjon onKeyRelease (e: KeyboardEvent): void if (e.keyCode == 37) // 37 er nøkkelkode for venstre pil left_txt.text = "Nei"; hvis (e.keyCode == 38) // 38 er nøkkelkode for pil opp up_txt.text = "Nei"; hvis (e.keyCode == 39) // 39 er nøkkelkode for høyre pil right_txt.text = "Nei"; hvis (e.keyCode == 40) // 40 er nøkkelkode for nedpilen down_txt.text = "Nei"; hvis (e.keyCode == 32) // 32 er nøkkelkode for mellomromstasten space_txt.text = "No"; hvis (e.ctrlKey == false) ctrl_txt.text = "Nei"; hvis (e.shiftKey == false) shift_txt.text = "Nei";
Test filmen din, og alt skal være bra! Hvis du har kommentarer eller problemer, legg dem bare inn i kommentarfeltet, og jeg (eller noen andre) vil svare på spørsmålet ditt.
Takk for at du leser, og jeg håper det hjalp deg med å lære mer om viktige presser i Flash.