Leer hoe u sleutelcodes in ActionScript 3.0 gebruikt om te detecteren wanneer de gebruiker op een specifieke toets drukt.
Laten we eens kijken naar het eindresultaat waar we naartoe zullen werken:
Test de antwoorden door op de toetsen op uw toetsenbord te drukken ...
Open een nieuw Flash-document. Voeg links statische tekstvakken toe met de namen van de sleutels die u zult detecteren en dynamische tekstvakken met daarin de tekst "Nee".
Geef uw dynamische tekstvakken instantienamen met het volgende formaat: "keyname_txt
"Mijne zijn ctrl_txt
, shift_txt
, left_txt
, up_txt
, right_txt
, down_txt
en space_text
respectievelijk.
Gaan Bestand> Nieuw
en selecteer Actionscript-bestand
.
Stel nu de basisdocumentklasse als volgt in: (Als u meer wilt weten over documentklassen, lees dan de Quick Tip van Michael)
pakket import flash.display.MovieClip; openbare klasse KeyCodes breidt MovieClip uit openbare functie KeyCodes ()
Om te detecteren wanneer de gebruiker op een toets drukt met AS3, moeten we gebeurtenislisteners toevoegen die luisteren naar een gebruiker die toetsen indrukt en loslaat. We kunnen dit doen door het volgende stuk code toe te voegen aan ons Toetscodes ()
constructorfunctie:
openbare functie KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Voeg een gebeurtenislistener toe aan het werkgebied dat luistert naar een toets die wordt ingedrukt stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Voeg een gebeurtenislistener toe aan het podium dat luistert naar een sleutel die wordt vrijgegeven
Voordat we verder gaan, moeten we een regel code toevoegen om het te importeren KeyboardEvent
. Voeg deze regel code toe waar we het importeren Filmclip
les op regel 3:
pakket import flash.display.MovieClip; import flash.events.KeyboardEvent;
Onder onze luisteraars voegen twee functies toe die worden opgeroepen wanneer de gebruiker een toets indrukt of loslaat:
openbare functie KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Voeg een gebeurtenislistener toe aan het werkgebied dat luistert naar een toets die wordt ingedrukt stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Voeg een gebeurtenislistener toe aan de fase die luistert naar een sleutel die wordt vrijgegeven op onKeyPress (e: KeyboardEvent): void function onKeyRelease (e: KeyboardEvent): void
Nu kunnen we een toevoegen spoor()
voor elke functie, dus wanneer u op een toets drukt, wordt de "toets ingedrukt" in het uitvoerpaneel gevolgd en "toets losgelaten" wanneer de toets wordt losgelaten. Om dit te doen kunnen we de volgende code toevoegen aan onze functies:
openbare functie KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Voeg een gebeurtenislistener toe aan het werkgebied dat luistert naar een toets die wordt ingedrukt stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Voeg een gebeurtenislistener toe aan de fase die luistert naar een sleutel die wordt vrijgegeven op onKeyPress (e: KeyboardEvent): void trace ("key pressed"); function onKeyRelease (e: KeyboardEvent): void trace ("key vrijgegeven");
Test uw film (Ctrl + Enter). Wanneer u op een toets drukt, moet deze "toets ingedrukt" naar uw uitvoerpaneel volgen en "toets loslaten" wanneer u deze loslaat.
U kunt detecteren welke toets is ingedrukt door de toegangscode te volgen. Wijzig uw trace van trace ("toets ingedrukt")
naar trace (e.keyCode)
en verwijder de sleutel vrijgegeven spoor. Uw code zou er nu als volgt uit moeten zien:
openbare functie KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Voeg een gebeurtenislistener toe aan het werkgebied dat luistert naar een toets die wordt ingedrukt stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Voeg een gebeurtenislistener toe aan de fase die luistert naar een sleutel die wordt vrijgegeven op onKeyPress (e: KeyboardEvent): void trace (e.keyCode); function onKeyRelease (e: KeyboardEvent): void
Wanneer u nu op een toets drukt, volgt de code die betrekking heeft op die specifieke sleutel. Als ik op de linkerpijl druk, zal het volgen 37
in het uitvoerpaneel en de spatiebalk zal volgen 32
.
Met deze informatie letterlijk binnen handbereik kunt u verschillende evenementen uitvoeren voor verschillende sleutels, allemaal met één gebeurtenislistener. Probeer deze code aan uw functie toe te voegen en kijk wat er gebeurt als u op de spatiebalk drukt:
function onKeyPress (e: KeyboardEvent): void trace (e.keyCode); if (e.keyCode == 32) // Als de sleutelcode gelijk is aan 32 (spatiebalk) trace ("spatiebalk ingedrukt");
Als u nu op de spatiebalk drukt, volgt niet alleen 32, maar wordt ook "spatiebalk ingedrukt" gevolgd. U kunt dit gebruiken om veel verschillende sleutels apart af te handelen binnen de ene functie.
Ga je gang en verwijder het spoor binnen de "als" -instructie. Vervang het hiermee:
function onKeyPress (e: KeyboardEvent): void trace (e.keyCode); if (e.keyCode == 32) // Als de toegangscode gelijk is aan 32 (spatiebalk) space_txt.text = "Ja"; // Wijzig het tekstvak in de spatiebalk in "Ja"
Wanneer u nu op de spatiebalk drukt, ziet u dat het spatiebalklabel verandert van "Nee" in "Ja".
Doe dit voor alle toetsen behalve controle en shift, omdat ze speciale manieren hebben om te worden gedetecteerd.
function onKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 is keycode voor linkerpijl left_txt.text = "Ja"; if (e.keyCode == 38) // 38 is keycode voor pijl omhoog up_txt.text = "Ja"; if (e.keyCode == 39) // 39 is keycode voor rechterpijl right_txt.text = "Ja"; if (e.keyCode == 40) // 40 is keycode voor pijl-omlaag down_txt.text = "Ja"; if (e.keyCode == 32) // 32 is keycode voor spatiebalk space_txt.text = "Ja";
Hoe detecteren we of de bedieningsknoppen of schakelknoppen worden ingedrukt? Elk heeft een eenvoudig ingebouwde variabele die automatisch wordt gewijzigd wanneer de toetsen worden ingedrukt. Je kunt ze detecteren met behulp van de volgende code. Zet deze code onder de andere "als" -instructies in onkeypress ()
.
if (e.ctrlKey == true) ctrl_txt.text = "Ja"; if (e.shiftKey == true) shift_txt.text = "Ja";
Notitie: er is ook Alt toets
, die zal detecteren of de alt-toets wordt ingedrukt. Dit werkt alleen in Adobe AIR-toepassingen als het altaar wordt ingedrukt terwijl gefocust in een Flash-bestand bijna altijd focus van de SWF zal hebben en daarom niet werkt.
Om de releasefunctie te maken, hoeven we alleen de code in de kopie te kopiëren onkeypress ()
functie en verander gewoon een paar dingen.
We moeten alle tekst wijzigen om "Nee" te zeggen in plaats van "Ja" en controleren of ctrlKey
en Shift toets
zijn vals
niet waar
. Dit is hoe de definitieve code eruit zou moeten zien:
pakket import flash.display.MovieClip; import flash.events.KeyboardEvent; openbare klasse KeyCodes breidt MovieClip openbare functie KeyCodes () uit stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Voeg een gebeurtenislistener toe aan het werkgebied dat luistert naar een toets die wordt ingedrukt stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Voeg een gebeurtenislistener toe aan de fase die luistert naar een sleutel die wordt vrijgegeven op onKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 is keycode voor linkerpijl left_txt.text = "Ja "; if (e.keyCode == 38) // 38 is keycode voor pijl omhoog up_txt.text = "Ja"; if (e.keyCode == 39) // 39 is keycode voor rechterpijl right_txt.text = "Ja"; if (e.keyCode == 40) // 40 is keycode voor pijl-omlaag down_txt.text = "Ja"; if (e.keyCode == 32) // 32 is keycode voor spatiebalk space_txt.text = "Ja"; if (e.ctrlKey == true) ctrl_txt.text = "Ja"; if (e.shiftKey == true) shift_txt.text = "Ja"; function onKeyRelease (e: KeyboardEvent): void if (e.keyCode == 37) // 37 is keycode voor linkerpijl left_txt.text = "Nee"; if (e.keyCode == 38) // 38 is keycode voor pijl omhoog up_txt.text = "Nee"; if (e.keyCode == 39) // 39 is keycode voor rechterpijl right_txt.text = "Nee"; if (e.keyCode == 40) // 40 is keycode voor pijl-omlaag down_txt.text = "Nee"; if (e.keyCode == 32) // 32 is keycode voor spatiebalk space_txt.text = "Nee"; if (e.ctrlKey == false) ctrl_txt.text = "Nee"; if (e.shiftKey == false) shift_txt.text = "Nee";
Verklaar de functies binnen de constructor betekent dat ze worden verzameld als de gebeurtenislisteners worden verwijderd. Als je liever hebt dat dit niet is gebeurd, kun je ze als methoden declareren, zoals:
pakket import flash.display.MovieClip; import flash.events.KeyboardEvent; openbare klasse KeyCodes breidt MovieClip openbare functie KeyCodes () uit stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Voeg een gebeurtenislistener toe aan het werkgebied dat luistert naar een toets die wordt ingedrukt stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Voeg een gebeurtenislistener toe aan de fase die luistert naar een sleutel die wordt vrijgegeven public function onKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 is keycode voor linkerpijl left_txt.text = "Ja"; if (e.keyCode == 38) // 38 is keycode voor pijl omhoog up_txt.text = "Ja"; if (e.keyCode == 39) // 39 is keycode voor rechterpijl right_txt.text = "Ja"; if (e.keyCode == 40) // 40 is keycode voor pijl-omlaag down_txt.text = "Ja"; if (e.keyCode == 32) // 32 is keycode voor spatiebalk space_txt.text = "Ja"; 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 is keycode voor linkerpijl left_txt.text = "Nee"; if (e.keyCode == 38) // 38 is keycode voor pijl omhoog up_txt.text = "Nee"; if (e.keyCode == 39) // 39 is keycode voor rechterpijl right_txt.text = "Nee"; if (e.keyCode == 40) // 40 is keycode voor pijl-omlaag down_txt.text = "Nee"; if (e.keyCode == 32) // 32 is keycode voor spatiebalk space_txt.text = "Nee"; if (e.ctrlKey == false) ctrl_txt.text = "Nee"; if (e.shiftKey == false) shift_txt.text = "Nee";
Test je film en alles zou goed moeten zijn! Als je opmerkingen of problemen hebt, plaats deze dan gewoon in het opmerkingengedeelte en ik (of iemand anders) zal je vraag beantwoorden.
Bedankt voor het lezen en ik hoop dat dit u heeft geholpen meer te leren over het indrukken van toetsen in Flash.