Los objetos de visualización que heredan su modelo de interacción de la clase InteractiveObject pueden responder a eventos del teclado mediante detectores de eventos. Por ejemplo, se puede colocar un detector de eventos en el escenario para detectar entradas de teclado y responder a las mismas. En el código siguiente, un detector de eventos captura una pulsación de tecla y se muestran las propiedades de nombre de tecla y código de tecla:
function reportKeyDown(event:KeyboardEvent):void
{
trace("Key Pressed: " + String.fromCharCode(event.charCode) + " (character code: " + event.charCode + ")");
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);
Alguna teclas, como la tecla Ctrl, generan eventos aunque no tengan un glifo de representación.
En el ejemplo de código anterior, el detector de eventos del teclado captura la entrada de teclado para todo el escenario. También se puede escribir un detector de eventos para un objeto de visualización específico en el escenario; este detector de eventos se activaría cuando se seleccionara el objeto.
En el siguiente ejemplo, las pulsaciones de teclas se reflejan en el panel Salida cuando el usuario escribe en la instancia de TextField. Si se mantiene presionada la tecla Mayús, el color del borde de TextField cambiará temporalmente a rojo.
En este código se supone que hay una instancia de TextField denominada
tf
en el objeto Stage (el escenario).
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 clase TextField también notifica un evento
textInput
que se puede detectar cuando un usuario introduce texto. Para obtener más información, consulte
Captura de entradas de texto
.
Nota:
en el motor de ejecución de AIR se puede cancelar un evento keyboard. En el motor de ejecución de Flash Player, no se puede cancelar un evento keyboard.
Códigos de teclas y códigos de caracteres
Se puede acceder a las propiedades
keyCode
y
charCode
de un evento de teclado para determinar la tecla que se ha presionado y activar a continuación otras acciones. La propiedad
keyCode
es un valor numérico que se corresponde con el valor de una tecla del teclado. La propiedad
charCode
es el valor numérico de la tecla en el juego de caracteres actual. (El juego de caracteres predeterminado es UTF-8, que es compatible con ASCII.)
La principal diferencia entre el código de tecla y los valores de caracteres es que el valor del código de tecla representa una tecla determinada del teclado (el 1 de un teclado es distinto del 1 de la fila superior, pero la tecla que genera "1" y la tecla que genera "!" es la misma) y el valor de carácter representa un carácter determinado (los caracteres R y r son distintos).
Las correspondencias entre las teclas y sus códigos de tecla dependen del dispositivo y del sistema operativo. Por esta razón, no se deben utilizar asignaciones de teclas para activar acciones. Se deben utilizar los valores constantes predefinidos que proporciona la clase Keyboard para hacer referencia a las propiedades
keyCode
apropiadas. Por ejemplo, en lugar de utilizar la asignación de tecla para la tecla Mayús, se debe utilizar la constante
Keyboard.SHIFT
(como se indica en el ejemplo de código anterior).
Precedencia de KeyboardEvent
Al igual que con los otros eventos, la secuencia de eventos de teclado se determina por la jerarquía de objetos de visualización, no en el orden en que se asignan métodos
addEventListener()
en el código.
Por ejemplo, supongamos que se coloca un campo de texto
tf
dentro de un clip de película denominado
container
y que se añade un detector de eventos para un evento de teclado en ambas instancias, como se muestra en el siguiente ejemplo:
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 + ")");
}
Debido a que hay un detector en el campo de texto y en su contenedor principal, se llama dos veces a la función
reportKeyDown()
por cada pulsación en el campo de texto. Hay que tener en cuenta que por cada tecla pulsada, el campo de texto distribuye un evento antes de que el clip de película
contenedor
distribuya un evento.
El sistema operativo y el navegador web procesarán los eventos de teclado antes que Adobe Flash Player o AIR. Por ejemplo, en Microsoft Internet Explorer, si se pulsan Ctrl+W se cierra la ventana del navegador antes de que un archivo SWF contenido pueda distribuir un evento de teclado.