Suggerimento rapido utilizzo dei codici chiave AS3

Scopri come utilizzare i codici chiave in ActionScript 3.0 per rilevare quando l'utente preme un tasto specifico.


Anteprima del risultato finale

Diamo un'occhiata al risultato finale su cui lavoreremo:

Prova le risposte premendo i tasti sulla tastiera ...


Passaggio 1: aggiungere caselle di testo

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.


Passaggio 2: creare il codice di base

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 () 

Passaggio 3: creare gli eventi listener

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;

Passaggio 4: Test semplice

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.


Passaggio 5: Rileva i codici chiave

È 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.


Passaggio 6: modifica del testo sulla pressione dei tasti

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"; 

Passaggio 7: Rileva il controllo e lo spostamento

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à.


Passaggio 8: scrivere la funzione di rilascio

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"; 

Conclusione

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.