Aspectos básicos de la interacción con el usuario

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

La aplicación puede crear interactividad utilizando ActionScript 3.0 para responder a la actividad del usuario. Para comprender esta sección es necesario conocer el modelo de eventos de ActionScript 3.0. Para obtener más información, consulte Gestión de eventos .

Captura de entradas del usuario

La interacción con el usuario, ya sea con el teclado, el ratón, la cámara o una combinación de estos dispositivos, es la base de interactividad. En ActionScript 3.0, identificar la interacción del usuario y responder a la misma requieren básicamente detectar eventos.

La clase InteractiveObject, una subclase de la clase DisplayObject, proporciona la estructura común de eventos y la funcionalidad necesaria para controlar la interacción con el usuario. Las instancias de la clase InteractiveObject no se crean directamente. Los objetos de visualización, como SimpleButton, Sprite, TextField y diversos componentes de Flex y la herramienta de edición de Flash heredan su modelo de interacción con el usuario de esta clase y, por tanto, comparten una estructura común. Esto significa que las técnicas que aprenda y el código que escriba para controlar la interacción del usuario en un objeto derivado de InteractiveObject son aplicables a todos los demás.

Conceptos y términos importantes

Antes de continuar, es importante familiarizarse con los siguientes términos clave relacionados con la interacción del usuario:

Código de caracteres
Código numérico que representa un carácter del juego de caracteres actual (asociado con la pulsación de una tecla en el teclado). Por ejemplo, "D" y "d" tienen distintos códigos de carácter, aunque se crean con la misma tecla en un teclado inglés de EE.UU.

Menú contextual
Menú que aparece cuando un usuario hace clic con el botón derecho o utiliza una combinación específica de teclado-ratón. Los comandos de menú contextual suelen aplicarse directamente al objeto en el que se ha hecho clic. Por ejemplo, un menú contextual para una imagen puede contener un comando para mostrar la imagen en una ventana independiente y un comando para descargarla.

Selección
Indicación de que un elemento seleccionado está activo y es el destino de una interacción de teclado o ratón.

Código de tecla
Código numérico correspondiente a una tecla física del teclado.

Administración de la selección

Un objeto interactivo puede recibir la selección mediante programación o mediante una acción del usuario. Además, si la propiedad tabEnabled se establece en true , el usuario puede pasar la selección de un objeto a otro mediante la tecla Tabulador. Hay que tener en cuenta que el valor de tabEnabled es false de manera predeterminada, salvo en los siguientes casos:

  • En un objeto SimpleButton, el valor es true .

  • Para un campo de texto de entrada, el valor es true .

  • En un objeto Sprite o MovieClip con buttonMode establecido en true , el valor es true .

En cada una de estas situaciones, se puede añadir un detector de FocusEvent.FOCUS_IN o FocusEvent.FOCUS_OUT para proporcionar un comportamiento adicional cuando cambie la selección. Esto es especialmente útil en los campos de texto y formularios, pero también se puede utilizar en objetos Sprite, MovieClip o en cualquier objeto que herede de la clase InteractiveObject. El siguiente ejemplo muestra cómo activar el cambio de selección de un objeto a otro con la tecla Tabulador y cómo responder al evento de selección posterior. En este caso, cada cuadrado cambia de color cuando se selecciona.

Nota: Flash Professional utiliza métodos abreviados de teclado para administrar la selección; por lo tanto, para simular correctamente la administración de la selección, hay que probar los archivos SWF en un navegador o AIR en lugar de en Flash.
var rows:uint = 10; 
var cols:uint = 10; 
var rowSpacing:uint = 25; 
var colSpacing:uint = 25; 
var i:uint; 
var j:uint; 
for (i = 0; i < rows; i++) 
{ 
    for (j = 0; j < cols; j++) 
    { 
        createSquare(j * colSpacing, i * rowSpacing, (i * cols) + j); 
    } 
} 
 
function createSquare(startX:Number, startY:Number, tabNumber:uint):void 
{ 
    var square:Sprite = new Sprite(); 
    square.graphics.beginFill(0x000000); 
    square.graphics.drawRect(0, 0, colSpacing, rowSpacing); 
    square.graphics.endFill(); 
    square.x = startX; 
    square.y = startY; 
    square.tabEnabled = true; 
    square.tabIndex = tabNumber; 
    square.addEventListener(FocusEvent.FOCUS_IN, changeColor); 
    addChild(square); 
} 
function changeColor(event:FocusEvent):void 
{ 
    event.target.transform.colorTransform = getRandomColor(); 
} 
function getRandomColor():ColorTransform 
{ 
    // Generate random values for the red, green, and blue color channels. 
    var red:Number = (Math.random() * 512) - 255; 
    var green:Number = (Math.random() * 512) - 255; 
    var blue:Number = (Math.random() * 512) - 255; 
     
    // Create and return a ColorTransform object with the random colors. 
    return new ColorTransform(1, 1, 1, 1, red, green, blue, 0); 
}

Detección de tipos de entrada

Con Flash Player 10.1 y Adobe AIR 2, se introdujo la posibilidad de probar el entorno del motor de ejecución para comprobar la compatibilidad de tipos de entrada específicos. Es posible utilizar ActionScript para probar si el dispositivo en el que está implantado el motor de ejecución:
  • Admite entrada con lápiz stylus o con los dedos (o no admite ninguna entrada táctil).

  • Tiene un teclado virtual o físico para el usuario (o no tiene ningún teclado).

  • Muestra un cursor (si no es así, las funciones que dependen de la posición del cursor sobre los objetos no funcionarán).

Las API de ActionScript de detección de entrada incluyen:

Las API de detección de entrada permiten aprovechar las capacidades del dispositivo del usuario u ofrecer alternativas si dichas capacidades no están presentes. Estas API son especialmente útiles para desarrollar aplicaciones móviles y con tecnología táctil. Por ejemplo, si tiene una interfaz para dispositivo móvil con botones demasiado pequeños para un lápiz stylus, puede proporcionar una interfaz alternativa con botones más grandes que el usuario puede tocar con los dedos. El siguiente código es para una aplicación con una función llamada createStylusUI() que asigna un conjunto de elementos de interfaz de usuario indicados para lápices stylus. Otra función, llamada createTouchUI(), asigna otro conjunto de elementos de interfaz de usuario indicados para operaciones táctiles:

if(Capabilities.touchscreenType == TouchscreenType.STYLUS ){ 
    //Construct the user interface using small buttons for a stylus 
    //and allow more screen space for other visual content 
    createStylusUI(); 
} else if(Capabilities.touchscreenType = TouchscreenType.FINGER){ 
    //Construct the user interface using larger buttons 
    //to capture a larger point of contact with the device 
    createTouchUI(); 
}
Cuando desarrolle aplicaciones para distintos entornos de entrada, tenga en cuenta la siguiente tabla de compatibilidad:

Entorno

supportsCursor

touchscreenType == TÁCTIL

touchscreenType == STYLUS

touchscreenType == NINGUNO

Escritorio tradicional

true

false

false

true

Dispositivos táctiles capacitivos (tablets, PDA y teléfonos que detectan toques suaves de los dedos, como el iPhone de Apple o Palm Pre)

false

true

false

false

Dispositivos táctiles duros (tablets, PDA y teléfonos que detectan toques precisos y con presión, como el HTC Fuze)

false

false

true

false

Dispositivos no táctiles (teléfonos y dispositivos que pueden ejecutar aplicaciones pero que no disponen de pantallas táctiles)

false

false

false

true

Nota: las distintas plataformas de dispositivos pueden admitir muchas combinaciones de tipos de entrada. Utilice esta tabla como guía general.