Scopri come utilizzare i codici chiave in ActionScript 3.0 per rilevare quando l'utente preme un tasto specifico.
Diamo un'occhiata al risultato finale su cui lavoreremo:
Prova le risposte premendo i tasti sulla tastiera ...
Apri un nuovo documento Flash. Aggiungi caselle di testo statiche sulla sinistra che hanno i nomi dei tasti che verranno rilevati e le caselle di testo dinamiche con il testo "No" al loro interno.
Dai ai tuoi nomi di istanze delle caselle di testo dinamiche il seguente formato: "keyname_txt
"I miei sono ctrl_txt
, shift_txt
, left_txt
, up_txt
, right_txt
, down_txt
e space_text
rispettivamente.
Partire File> Nuovo
e selezionare File Actionscript
.
Ora imposta la classe del documento di base in questo modo: (Se vuoi conoscere le classi di documenti, leggi il suggerimento di Michael)
package import flash.display.MovieClip; KeyCode di classe pubblica estende MovieClip KeyCode public function ()
Per rilevare quando l'utente preme un tasto con AS3, è necessario aggiungere listener di eventi che ascoltino un utente che preme e rilascia i tasti. Possiamo farlo aggiungendo il seguente codice all'interno del nostro Keycodes ()
funzione di costruzione:
funzione pubblica KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Aggiungi un listener di eventi allo stage che ascolta la pressione di una chiave stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Aggiungi un listener di eventi allo stage che ascolta la chiave rilasciata
Prima di procedere, è necessario aggiungere una riga di codice per importare il file KeyboardEvent
. Aggiungi questa riga di codice qui sotto dove importiamo Un filmato
classe sulla linea 3:
package import flash.display.MovieClip; import flash.events.KeyboardEvent;
Sotto i nostri ascoltatori aggiungiamo due funzioni che verranno chiamate quando l'utente preme o rilascia un tasto:
funzione pubblica KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Aggiungi un listener di eventi allo stage che ascolta la pressione di una chiave stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Aggiungi un listener di eventi allo stage che ascolta la funzione di rilascio della chiave onKeyPress (e: KeyboardEvent): void function onKeyRelease (e: KeyboardEvent): void
Ora possiamo aggiungere un traccia()
a ciascuna funzione, quindi quando si preme un tasto verrà tracciato il "tasto premuto" nel pannello di uscita e il "tasto rilasciato" quando il tasto viene rilasciato. Per fare questo possiamo aggiungere il seguente codice nelle nostre funzioni:
funzione pubblica KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Aggiungi un listener di eventi allo stage che ascolta la pressione di una chiave stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Aggiungi un listener di eventi allo stage che ascolta la funzione di rilascio chiave onKeyPress (e: KeyboardEvent): void trace ("tasto premuto"); function onKeyRelease (e: KeyboardEvent): void trace ("chiave rilasciata");
Metti alla prova il tuo film (Ctrl + Invio). Quando si preme un tasto, dovrebbe tracciare il "tasto premuto" nel pannello di output e il "tasto rilasciato" quando lo si rilascia.
È possibile rilevare quale tasto è stato premuto tracciando il keycode. Cambia la tua traccia da traccia ("tasto premuto")
a trace (e.keyCode)
e rimuovere la traccia rilasciata dalla chiave. Il tuo codice dovrebbe ora apparire come questo:
funzione pubblica KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Aggiungi un listener di eventi allo stage che ascolta la pressione di una chiave stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Aggiungi un listener di eventi allo stage che ascolta la funzione di rilascio della chiave onKeyPress (e: KeyboardEvent): void trace (e.keyCode); function onKeyRelease (e: KeyboardEvent): void
Ora quando si preme un tasto verrà tracciato il codice relativo a quella chiave specifica. Se premo la freccia sinistra, traccerà 37
nel pannello di output e verrà tracciata la barra spaziatrice 32
.
Con queste informazioni letteralmente a portata di mano è possibile eseguire diversi eventi per chiavi diverse, il tutto con un ascoltatore di eventi. Prova ad aggiungere questo codice alla tua funzione e guarda cosa succede quando premi la barra spaziatrice:
function onKeyPress (e: KeyboardEvent): void trace (e.keyCode); if (e.keyCode == 32) // Se il codice chiave è uguale a 32 (barra spaziatrice) traccia ("barra spaziatrice premuta");
Ora se si preme la barra spaziatrice non solo traccerà 32, traccerà "barra spaziatrice premuta". Puoi usarlo per gestire separatamente molte chiavi diverse all'interno di una funzione.
Vai avanti ed elimina la traccia all'interno dell'istruzione "if". Sostituiscilo con questo:
function onKeyPress (e: KeyboardEvent): void trace (e.keyCode); if (e.keyCode == 32) // Se il keycode è uguale a 32 (barra spaziatrice) space_txt.text = "Yes"; // Cambia la casella di testo della barra spaziatrice in "Sì"
Ora quando premi la barra spaziatrice, dovresti vedere il cambio dell'etichetta della barra spaziatrice da "No" a "Sì".
Fai questo per tutti i tasti tranne il controllo e lo spostamento, poiché hanno modi speciali di essere rilevati.
function onKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 è keycode per left arrow left_txt.text = "Yes"; if (e.keyCode == 38) // 38 è keycode per up arrow up_txt.text = "Yes"; if (e.keyCode == 39) // 39 è keycode per right arrow right_txt.text = "Yes"; if (e.keyCode == 40) // 40 è keycode per down arrow down_txt.text = "Yes"; if (e.keyCode == 32) // 32 è keycode per spacebar space_txt.text = "Yes";
Come possiamo rilevare se i pulsanti di controllo o shift sono premuti? Ognuno ha una variabile incorporata facile che viene automaticamente modificata quando si premono i tasti. Li puoi rilevare usando il seguente codice. Metti questo codice sotto le altre dichiarazioni "if" in onkeypress ()
.
if (e.ctrlKey == true) ctrl_txt.text = "Yes"; if (e.shiftKey == true) shift_txt.text = "Yes";
Nota: c'è anche altKey
, che rileverà se viene premuto il tasto alt. Questo funzionerà solo nelle applicazioni Adobe AIR, poiché premendo alt mentre si è focalizzati in un file Flash quasi sempre si concentrerà sul file SWF e quindi non funzionerà.
Per creare la funzione di rilascio tutto ciò che dobbiamo fare è copiare il codice all'interno del onkeypress ()
funzione e basta cambiare alcune cose.
Dobbiamo cambiare tutto il testo per dire "No" invece di "Sì" e controllare se ctrlKey
e tasto delle maiuscole
siamo falso
non vero
. Questo è come dovrebbe apparire il codice finale:
package import flash.display.MovieClip; import flash.events.KeyboardEvent; KeyCode di classe pubblica estende MovieClip public function KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Aggiungi un listener di eventi allo stage che ascolta la pressione di una chiave stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Aggiungi un listener di eventi allo stage che ascolta la funzione di rilascio della chiave onKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 è keycode per left arrow left_txt.text = "Yes "; if (e.keyCode == 38) // 38 è keycode per up arrow up_txt.text = "Yes"; if (e.keyCode == 39) // 39 è keycode per right arrow right_txt.text = "Yes"; if (e.keyCode == 40) // 40 è keycode per down arrow down_txt.text = "Yes"; if (e.keyCode == 32) // 32 è keycode per spacebar space_txt.text = "Yes"; if (e.ctrlKey == true) ctrl_txt.text = "Yes"; if (e.shiftKey == true) shift_txt.text = "Yes"; function onKeyRelease (e: KeyboardEvent): void if (e.keyCode == 37) // 37 è keycode per left arrow left_txt.text = "No"; if (e.keyCode == 38) // 38 è keycode per up arrow up_txt.text = "No"; if (e.keyCode == 39) // 39 è keycode per right arrow right_txt.text = "No"; if (e.keyCode == 40) // 40 è keycode per down arrow down_txt.text = "No"; if (e.keyCode == 32) // 32 è keycode per spacebar space_txt.text = "No"; if (e.ctrlKey == false) ctrl_txt.text = "No"; if (e.shiftKey == false) shift_txt.text = "No";
Dichiarare le funzioni all'interno del costruttore significa che verranno raccolte automaticamente se i listener di eventi vengono rimossi. Se preferisci che ciò non accada, puoi dichiararli come metodi, in questo modo:
package import flash.display.MovieClip; import flash.events.KeyboardEvent; KeyCode di classe pubblica estende MovieClip public function KeyCodes () stage.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); // Aggiungi un listener di eventi allo stage che ascolta la pressione di una chiave stage.addEventListener (KeyboardEvent.KEY_UP, onKeyRelease); // Aggiungi un listener di eventi allo stage che ascolta la chiave rilasciata public function onKeyPress (e: KeyboardEvent): void if (e.keyCode == 37) // 37 è keycode per left arrow left_txt.text = "Sì"; if (e.keyCode == 38) // 38 è keycode per up arrow up_txt.text = "Yes"; if (e.keyCode == 39) // 39 è keycode per right arrow right_txt.text = "Yes"; if (e.keyCode == 40) // 40 è keycode per down arrow down_txt.text = "Yes"; if (e.keyCode == 32) // 32 è keycode per spacebar space_txt.text = "Yes"; if (e.ctrlKey == true) ctrl_txt.text = "Yes"; if (e.shiftKey == true) shift_txt.text = "Yes"; public function onKeyRelease (e: KeyboardEvent): void if (e.keyCode == 37) // 37 è keycode per left arrow left_txt.text = "No"; if (e.keyCode == 38) // 38 è keycode per up arrow up_txt.text = "No"; if (e.keyCode == 39) // 39 è keycode per right arrow right_txt.text = "No"; if (e.keyCode == 40) // 40 è keycode per down arrow down_txt.text = "No"; if (e.keyCode == 32) // 32 è keycode per spacebar space_txt.text = "No"; if (e.ctrlKey == false) ctrl_txt.text = "No"; if (e.shiftKey == false) shift_txt.text = "No";
Metti alla prova il tuo film e tutto dovrebbe andare bene! Se hai commenti o problemi, pubblicali nella sezione dei commenti e io (o qualcun altro) risponderò alla tua domanda.
Grazie per la lettura e spero che ti abbia aiutato a saperne di più sulle funzioni principali di Flash.