Rilevamento dell'input da tastiera

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Gli oggetti di visualizzazione che ereditano il modello di interazione dalla classe InteractiveObject possono rispondere agli eventi da tastiera mediante dei listener di eventi. È possibile, ad esempio, posizionare un listener di eventi sullo stage in modo che intercetti e risponda all'input dalla tastiera. Nel codice seguente, un listener di eventi rileva la pressione di un tasto e visualizza il nome del tasto e le proprietà del codice tasto:

function reportKeyDown(event:KeyboardEvent):void 
{ 
    trace("Key Pressed: " + String.fromCharCode(event.charCode) +         " (character code: " + event.charCode + ")"); 
} 
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);

Alcuni tasti, ad esempio Ctrl, generano eventi anche se sono privi di rappresentazione sotto forma di glifo.

Nel codice di esempio precedente, il listener di eventi da tastiera rileva l'input da tastiera per l'intero stage. È possibile anche scrivere un listener di eventi per un oggetto di visualizzazione specifico sullo stage; questo evento viene attivato quando l'oggetto è l'elemento attivo.

Nell'esempio seguente, i comandi da tastiera sono visualizzati nel pannello Output solo quando l'utente digita all'interno dell'istanza TextField. Se tenete premuto il tasto Maiusc, il bordo dell'istanza TextField diventa temporaneamente rosso.

Questo codice presuppone che sullo stage sia presente un'istanza TextField di nome tf.

tf.border = true; 
tf.type = "input"; 
tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown); 
tf.addEventListener(KeyboardEvent.KEY_UP,reportKeyUp); 
 
function reportKeyDown(event:KeyboardEvent):void 
{ 
    trace("Key Pressed: " + String.fromCharCode(event.charCode) +         " (key code: " + event.keyCode + " character code: "         + event.charCode + ")"); 
    if (event.keyCode == Keyboard.SHIFT) tf.borderColor = 0xFF0000; 
} 
 
function reportKeyUp(event:KeyboardEvent):void 
{ 
    trace("Key Released: " + String.fromCharCode(event.charCode) +         " (key code: " + event.keyCode + " character code: " +         event.charCode + ")"); 
    if (event.keyCode == Keyboard.SHIFT) 
    { 
        tf.borderColor = 0x000000; 
    } 
}

La classe TextField visualizza anche un evento textInput che è possibile intercettare quando un utente immette un testo. Per ulteriori informazioni, vedete la sezione Rilevamento dell'input di testo.

Nota: nel runtime AIR, un evento della tastiera può essere annullato. Nel runtime Flash Player, un evento della tastiera non può essere annullato.

Codici tasto e codici di carattere

È possibile accedere alle proprietà keyCode e charCode di un evento di tastiera per determinare quale tasto è stato premuto e successivamente attivare altre azioni. La proprietà keyCode è un valore numerico che corrisponde al valore di un tasto sulla tastiera. La proprietà charCode è il valore numerico di tale tasto nel set di caratteri corrente (il set di caratteri predefinito è UTF-8, che supporta ASCII).

La differenza principale tra i valori dei codici tasto e i valori dei caratteri consiste nel fatto che il valore di un codice tasto rappresenta un determinato tasto sulla tastiera (l'1 su un tastierino numerico è diverso dall'1 nella fila di tasti superiore, ma il tasto che genera “1” e quello che genera “!” è lo stesso), mentre il valore di un carattere rappresenta un particolare carattere (i caratteri R e r sono diversi).

Nota: per le mappature tra tasti e relativi valori codice carattere in ASCII, vedete la classe flash.ui.Keyboard nella Guida di riferimento di Adobe ActionScript 3.0 per la piattaforma Adobe Flash.

Le mappature tra tasti e i relativi codici tasto dipendono dal dispositivo e dal sistema operativo. Per tale motivo, è consigliabile non utilizzare le mappature dei tasti per attivare azioni. Utilizzate invece i valori di costante predefiniti forniti dalla classe Keyboard per fare riferimento alle proprietà keyCode appropriate. Ad esempio, anziché utilizzare la mappatura per il tasto Maiusc, utilizzate la costante Keyboard.SHIFT (come mostrato nel codice di esempio precedente).

Precedenza KeyboardEvent

Come accade con altri eventi, la sequenza degli eventi da tastiera viene determinata dalla gerarchia degli oggetti di visualizzazione e non dall'ordine con cui vengono assegnati i metodi addEventListener() nel codice.

Supponete, ad esempio, di posizionare un campo di testo di nome tf all'interno di un clip filmato di nome container e di aggiungere un listener di eventi per un evento da tastiera a entrambe le istanze, come mostra l'esempio seguente:

container.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown); 
container.tf.border = true; 
container.tf.type = "input"; 
container.tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown); 
 
function reportKeyDown(event:KeyboardEvent):void 
{ 
    trace(event.currentTarget.name + " hears key press: " +         String.fromCharCode(event.charCode) + " (key code: " +         event.keyCode + " character code: " + event.charCode + ")"); 
}

Poiché è presente un listener sia sul campo di testo che sul relativo contenitore superiore, la funzione reportKeyDown() viene chiamata due volte per ogni comando da tastiera all'interno di TextField. Notate che per ogni tasto premuto, il campo di testo invia un evento prima del clip filmato container.

Il sistema operativo e il browser Web elaborano gli eventi da tastiera prima di Adobe Flash Player o AIR. In Microsoft Internet Explorer, ad esempio, premendo Ctrl+W viene chiusa la finestra del browser prima che l'eventuale file SWF in essa contenuto invii un evento da tastiera.