Lär dig hur du använder nyckelkoder i ActionScript 3.0 för att upptäcka när användaren trycker på en viss tangent.
Låt oss ta en titt på det slutliga resultatet vi ska arbeta för:
Testa svaren genom att trycka på tangenterna på tangentbordet ...
Öppna ett nytt Flash-dokument. Lägg till statiska textrutor till vänster som har namnen på tangenterna du kommer att upptäcka och dynamiska textrutor med texten "Nej" inuti dem.
Ange dina instansnamn med dynamiska textrutor med följande format: "keyname_txt
". Min är ctrl_txt
, shift_txt
, left_txt
, up_txt
, right_txt
, down_txt
och space_text
respektive.
Gå Fil> Ny
och välj ActionScript-fil
.
Lägg nu upp basdokumentklassen så här: (Om du vill lära dig om dokumentklasser läser Mikaels Snabbtips)
paket import flash.display.MovieClip; public class KeyCodes utökar MovieClip public function KeyCodes ()
För att upptäcka när användaren trycker på en tangent med AS3 måste vi lägga till händelselysare som lyssnar på att en användare trycker på och släpper ner nycklar. Vi kan göra detta genom att lägga till följande kod i vår Tangentkoder ()
konstruktör funktion:
allmän funktion KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Lägg till en händelse lyssnare på scenen som lyssnar på en nyckel som trycks in stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Lägg till en händelse lyssnare på scenen som lyssnar på att en nyckel släpps
Innan vi fortsätter måste vi lägga till en rad kod för att importera Keyboard
. Lägg till den här raden av kod nedan där vi importerar Filmklipp
klass på rad 3:
paket import flash.display.MovieClip; importera flash.events.KeyboardEvent;
Under våra lyssnare läggs till två funktioner som kommer att ringas när användaren antingen trycker på eller släpper en nyckel:
allmän funktion KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Lägg till en händelse lyssnare på scenen som lyssnar på en nyckel som trycks in stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Lägg till en händelse lyssnare på scenen som lyssnar på en nyckel som släpps funktion påKeyPress (e: KeyboardEvent): void funktion onKeyRelease (e: KeyboardEvent): void
Nu kan vi lägga till en spår()
till varje funktion, så när du trycker på en knapp kommer den att spåra "tangenttryckt" i utmatningspanelen och "tangent frigöras" när nyckeln släpps. För att göra detta kan vi lägga till följande kod i våra funktioner:
allmän funktion KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Lägg till en händelse lyssnare på scenen som lyssnar på en nyckel som trycks in stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Lägg till en händelse lyssnare på scenen som lyssnar på en nyckel som släpps funktionen påKeyPress (e: KeyboardEvent): void trace ("key pressed"); funktionen påKeyRelease (e: KeyboardEvent): void trace ("key released");
Testa din film (Ctrl + Enter). När du trycker på en knapp borde det spåra "tangenttryckt" i din utmatningspanel och "knappen släppt" när du släpper den.
Du kan upptäcka vilken tangent som har tryckts genom att spåra nyckelkoden. Ändra ditt spår från spår ("tangenttryckt")
till trace (e.keyCode)
och ta bort det nyckellösa spåret. Din kod ska nu se ut så här:
allmän funktion KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Lägg till en händelse lyssnare på scenen som lyssnar på en nyckel som trycks in stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Lägg till en händelse lyssnare på scenen som lyssnar på en nyckel som släpps funktionen påKeyPress (e: KeyboardEvent): void trace (e.keyCode); funktionen påKeyRelease (e: KeyboardEvent): void
Nu när du trycker på en knapp kommer det att spåra koden som gäller den specifika nyckeln. Om jag trycker på vänsterpil kommer den att spåra 37
in i utmatningspanelen och mellanslagstangenten spårar 32
.
Med den här informationen kan du enkelt utföra olika händelser för olika nycklar, alla med en händelse lyssnare. Försök att lägga till den här koden i din funktion och se vad som händer när du trycker på mellanslagstangenten:
funktion påKeyPress (e: KeyboardEvent): void trace (e.keyCode); om (e.keyCode == 32) // Om nyckelkoden är lika med 32 (mellanslag) spår ("mellanslag trycks");
Nu om du trycker på mellanslagstangenten kommer det inte bara att spåra 32, det kommer att spåra "mellanslagtryckt". Du kan använda detta för att hantera många olika nycklar separat i den ena funktionen.
Gå vidare och ta bort spåret i "if" -uppsättningen. Byt ut det med följande:
funktion påKeyPress (e: KeyboardEvent): void trace (e.keyCode); om (e.keyCode == 32) // Om nyckelkoden är lika med 32 (mellanslagstangent) space_txt.text = "Yes"; // Ändra mellanslagets textruta till "Ja"
Nu när du trycker på mellanslagstangenten bör du se mellanslagets etikettändring från "Nej" till "Ja".
Gör detta för alla nycklar utom kontroll och skift, eftersom de har särskilda sätt att upptäckas.
funktion påKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 är nyckelkoden för vänsterpil left_txt.text = "Yes"; om (e.keyCode == 38) // 38 är nyckelkoden för upppilen up_txt.text = "Yes"; om (e.keyCode == 39) // 39 är nyckelkoden för högerpil right_txt.text = "Yes"; om (e.keyCode == 40) // 40 är nyckelkoden för nedpilen down_txt.text = "Yes"; om (e.keyCode == 32) // 32 är nyckelkod för mellanslag space_txt.text = "Yes";
Hur upptäcker vi huruvida kontroll- eller skiftknapparna trycks in? Var och en har en lätt inbyggd variabel som automatiskt ändras när tangenterna trycks ned. Du kan upptäcka dem med hjälp av följande kod. Lägg den här koden under de andra "if" -sättningarna i onKeyPress ()
.
om (e.ctrlKey == true) ctrl_txt.text = "Yes"; om (e.shiftKey == true) shift_txt.text = "Yes";
Notera: det finns också altKey
, som kommer att upptäcka om alt-tangenten trycks in. Detta fungerar bara i Adobe AIR-program som att trycka på alt medan fokuserat i en Flash-fil kommer nästan alltid att ta fokus från SWF och fungerar därför inte.
För att skapa frisättningsfunktionen behöver vi bara kopiera koden inuti onKeyPress ()
funktion och ändra bara några saker.
Vi behöver ändra all text för att säga "Nej" istället för "Ja" och kolla om ctrlKey
och shiftKey
är falsk
inte Sann
. Det här är vad den sista koden ska se ut:
paket import flash.display.MovieClip; importera flash.events.KeyboardEvent; public class KeyCodes utökar MovieClip public function KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Lägg till en händelse lyssnare på scenen som lyssnar på en nyckel som trycks in stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Lägg till en händelse lyssnare på scenen som lyssnar på en nyckel som släpps funktion påKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 är nyckelkoden för vänsterpil left_txt.text = "Ja "; om (e.keyCode == 38) // 38 är nyckelkoden för upppilen up_txt.text = "Yes"; om (e.keyCode == 39) // 39 är nyckelkoden för högerpil right_txt.text = "Yes"; om (e.keyCode == 40) // 40 är nyckelkoden för nedpilen down_txt.text = "Yes"; om (e.keyCode == 32) // 32 är nyckelkod för mellanslag space_txt.text = "Yes"; om (e.ctrlKey == true) ctrl_txt.text = "Yes"; om (e.shiftKey == true) shift_txt.text = "Yes"; funktion påKeyRelease (e: KeyboardEvent): void if (e.keyCode == 37) // 37 är nyckelkoden för vänsterpil left_txt.text = "No"; om (e.keyCode == 38) // 38 är nyckelkoden för uppåtpil up_txt.text = "No"; om (e.keyCode == 39) // 39 är nyckelkoden för högerpil right_txt.text = "No"; om (e.keyCode == 40) // 40 är nyckelkoden för nedpilen down_txt.text = "No"; om (e.keyCode == 32) // 32 är nyckelkod för mellanslag space_txt.text = "No"; om (e.ctrlKey == false) ctrl_txt.text = "No"; om (e.shiftKey == false) shift_txt.text = "No";
Förklara funktionerna inne i konstruktören innebär att de kommer att skräpas om händelselysarna tas bort. Om du hellre det inte hände, kan du deklarera dem som metoder, så här:
paket import flash.display.MovieClip; importera flash.events.KeyboardEvent; public class KeyCodes utökar MovieClip public function KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Lägg till en händelse lyssnare på scenen som lyssnar på en nyckel som trycks in stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Lägg till en händelse lyssnare på scenen som lyssnar på en nyckel släpps allmän funktion påKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 är nyckelkoden för vänsterpil left_txt.text = "Ja"; om (e.keyCode == 38) // 38 är nyckelkoden för upppilen up_txt.text = "Yes"; om (e.keyCode == 39) // 39 är nyckelkoden för högerpil right_txt.text = "Yes"; om (e.keyCode == 40) // 40 är nyckelkoden för nedpilen down_txt.text = "Yes"; om (e.keyCode == 32) // 32 är nyckelkod för mellanslag space_txt.text = "Yes"; om (e.ctrlKey == true) ctrl_txt.text = "Yes"; om (e.shiftKey == true) shift_txt.text = "Yes"; allmän funktion påKeyRelease (e: KeyboardEvent): void if (e.keyCode == 37) // 37 är nyckelkoden för vänsterpil left_txt.text = "No"; om (e.keyCode == 38) // 38 är nyckelkoden för uppåtpil up_txt.text = "No"; om (e.keyCode == 39) // 39 är nyckelkoden för högerpil right_txt.text = "No"; om (e.keyCode == 40) // 40 är nyckelkoden för nedpilen down_txt.text = "No"; om (e.keyCode == 32) // 32 är nyckelkod för mellanslag space_txt.text = "No"; om (e.ctrlKey == false) ctrl_txt.text = "No"; om (e.shiftKey == false) shift_txt.text = "No";
Testa din film och allt borde vara bra! Om du har några kommentarer eller problem lägger bara in dem i kommentarfältet och jag (eller någon annan) svarar på din fråga.
Tack för att du läser och jag hoppas det hjälpte dig att lära dig mer om nyckelpressar i Flash.