Captura da entrada do teclado

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

Os objetos de exibição que herdam o modelo de interação da classe InteractiveObject podem responder aos eventos de teclado usando ouvintes de eventos. Você pode colocar, por exemplo, um ouvinte de eventos no palco para ouvir e responder à entrada do teclado. No exemplo a seguir, um ouvinte de eventos captura um pressionamento de tecla e as propriedades de código e nome da tecla são exibidos:

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

Algumas teclas, como a tecla Ctrl, geram eventos embora não tenha nenhuma representação de glifo.

No exemplo de código anterior, o ouvinte de eventos de teclado capturou a entrada do teclado para todo o palco. Você também pode gravar um ouvinte de eventos para um objeto de exibição específico no palco; esse ouvinte de eventos é acionado quando o objeto está em foco.

No exemplo a seguir, os pressionamentos de tecla são refletidos no painel Saída somente quando o usuário digita dentro da ocorrência TextField. Manter a tecla Shift temporariamente pressionada faz com que a cor da borda de TextField mude para vermelho.

Esse código supõe a existência de uma ocorrência TextField chamada tf no palco.

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

A classe TextField também registra um evento textInput que pode ser ouvido quando um usuário insere algum texto. Para obter mais informações, consulte Captura de entrada de texto .

Nota: No tempo de execução do AIR, um evento de teclado pode ser cancelado. No tempo de execução do Flash Player, o evento de teclado não pode ser cancelado.

Códigos de teclas e de códigos de caracteres

Você pode acessar as propriedades keyCode e charCode de um evento de teclado para determinar qual tecla foi pressionada e, em seguida, acionar outras ações. A propriedade keyCode é um valor numérico que corresponde ao valor de uma tecla no teclado. A propriedade charCode é o valor numérico dessa tecla no conjunto de caracteres atual. O conjunto de caracteres padrão é UTF-8, que oferece suporte para ASCII.

A principal diferença entre o código de tecla e os valores de caractere está no fato de o código de tecla representar uma tecla específica do teclado (o valor 1 de um teclado é diferente do valor 1 na linha superior, mas a tecla que gera “1” e a que gera “!” são iguais), enquanto o valor de caractere representa um caractere específico (os caracteres R e r são diferentes).

Nota: Consulte as correlações entre as teclas e seus valores de códigos de caracteres em ASCII na classe flash.ui.Keyboard da Referência do ActionScript® 3.0 para Adobe® Flash® Platform .

O mapeamento entre as teclas e os códigos de tecla dependem do dispositivo e do sistema operacional. Devido a isso, não use mapeamentos de tecla para acionar comandos. Em vez disso, use os valores de constantes predefinidos fornecidos pela classe Keyboard para fazer referência às propriedades keyCode adequadas. Por exemplo, em vez de usar o mapeamento para a tecla Shift, use a constante Keyboard.SHIFT (como mostra o código de exemplo anterior).

Precedência de KeyboardEvent

Assim como outros eventos, a sequência de eventos de teclado é determinada pela hierarquia de objetos de exibição, não pela ordem em que os métodos addEventListener() são atribuídos no código.

Suponha, por exemplo, que você coloque um campo de texto chamado tf em um clipe de filme chamado container e adicione um ouvinte de eventos para um evento de teclado nas duas ocorrências, como mostra o exemplo a seguir:

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 + ")"); 
}

Como há um ouvinte no campo de texto e no recipiente pai, a função reportKeyDown() é chamada duas vezes para cada pressionamento de tecla em TextField. Para cada tecla pressionada, o campo de texto envia um evento antes que o clipe de filme container faça isso.

O sistema operacional e o navegador da Web processam eventos de teclado antes do Adobe Flash Player ou AIR. No Microsoft Internet Explorer, por exemplo, pressionar Ctrl+W fecha a janela do navegador antes que qualquer arquivo SWF contido envie um evento de teclado.