Gestión de eventos táctiles

Flash Player 10.1 y posterior, Adobe AIR 2 y posterior

Los eventos táctiles básicos se gestionan del mismo modo que otros eventos, como eventos de ratón en ActionScript. Puede detectar una serie de eventos táctiles definidos por las constantes de tipo event en la clase TouchEvent .
Nota: para la entrada de puntos multitáctiles (como tocar el dispositivo con más de un dedo), el primer punto de contacto distribuye un evento mouse y un evento touch.
Para gestionar un evento táctil básico:
  1. Defina la aplicación para que gestione eventos táctiles estableciendo la propiedad flash.ui.Multitouch.inputMode como MultitouchInputMode.TOUCH_POINT .

  2. Asocie un detector de eventos a la instancia de una clase que herede propiedades de la clase InteractiveObject, por ejemplo, Sprite o TextField.

  3. Especifique el tipo de evento táctil para gestionar.

  4. Llame a una función de controlador de eventos para hacer algo como respuesta al evento.

Por ejemplo, el siguiente código muestra un mensaje cuando el cuadrado dibujado en mySprite se toca en un dispositivo táctil:

Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT; 
 
var mySprite:Sprite = new Sprite(); 
var myTextField:TextField = new TextField(); 
 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0,0,40,40); 
addChild(mySprite); 
 
mySprite.addEventListener(TouchEvent.TOUCH_TAP, taphandler); 
 
function taphandler(evt:TouchEvent): void { 
    myTextField.text = "I've been tapped"; 
    myTextField.y = 50; 
    addChild(myTextField); 
}

Propiedades de eventos táctiles

Cuando se produce un evento, se crea un objeto de evento. El objeto TouchEvent contiene información sobre la ubicación y las condiciones del evento táctil. Puede utilizar las propiedades del objeto de evento para recuperar dicha información.

Por ejemplo, el siguiente código crea un objeto TouchEvent evt y visualiza la propiedad stageX del objeto de evento (la coordenada x del punto en el espacio del escenario en que se produjo la entrada táctil) en el campo de texto:

Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT; 
 
var mySprite:Sprite = new Sprite(); 
var myTextField:TextField = new TextField(); 
 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0,0,40,40); 
addChild(mySprite); 
 
mySprite.addEventListener(TouchEvent.TOUCH_TAP, taphandler); 
 
function taphandler(evt:TouchEvent): void { 
myTextField.text = evt.stageX.toString; 
myTextField.y = 50; 
addChild(myTextField); 
}
Consulte la clase TouchEvent para saber qué propiedades hay disponibles en el objeto de evento.
Nota: no todas las propiedades TouchEvent se admiten en todos los entornos de motor de ejecución. Por ejemplo, no todos los dispositivos táctiles pueden detectar la cantidad de presión que el usuario aplica a la pantalla táctil. Así, la propiedad TouchEvent.pressure no se admite en dichos dispositivos. Intente probar una propiedad concreta para garantizar que la aplicación funciona y consulte Solución de problemas para obtener más información.

Fases de evento táctil

Realice el seguimiento en varias fases de un objeto InteractiveObject del mismo modo que haría con eventos de ratón. Y realice el seguimiento de eventos táctiles desde el principio, mitad y final de la interacción táctil. La clase TouchEvent proporciona valores para la gestión de los eventos touchBegin , touchMove y touchEnd .

Por ejemplo, podría utilizar eventos touchBegin , touchMove y touchEnd para dar al usuario información visual a medida que toca y mueve un objeto de visualización:

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 
var mySprite:Sprite = new Sprite(); 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0,0,40,40); 
addChild(mySprite); 
var myTextField:TextField = new TextField(); 
myTextField.width = 200; 
myTextField.height = 20; 
addChild(myTextField); 
 
mySprite.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin); 
stage.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove); 
stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd); 
function onTouchBegin(event:TouchEvent) { 
    myTextField.text = "touch begin" + event.touchPointID; 
} 
function onTouchMove(event:TouchEvent) { 
    myTextField.text = "touch move" + event.touchPointID; 
} 
function onTouchEnd(event:TouchEvent) { 
    myTextField.text = "touch end" + event.touchPointID; 
}
Nota: el detector táctil inicial se asocia a mySprite, pero los detectores de movimiento y finalización del evento táctil no se asocian. Si el dedo del usuario o el dispositivo señalador se mueve por delante del objeto de visualización, el escenario sigue detectando el evento táctil.

ID de punto táctil

La propiedad TouchEvent.touchPointID es esencial a la hora de escribir aplicaciones que respondan a entrada táctil. El motor de ejecución de Flash asigna a cada punto táctil un único valor touchPointID . Cada vez que una aplicación responde a las fases o movimiento de una entrada táctil, compruebe touchPointID antes de gestionar el evento. Los métodos de arrastre de entrada táctil de la clase Sprite utilizan la propiedad touchPointID como parámetro para que se gestione la instancia de entrada correcta. La propiedad touchPointID garantiza que un controlador de eventos responde a la entrada táctil correcta. En caso contrario, el controlador de eventos responde a cualquier instancia de tipo táctil (como todos los eventos touchMove ) en el dispositivo y produce un comportamiento impredecible. La propiedad es especialmente importante si el usuario arrastra objetos.

Utilice la propiedad touchPointID para gestionar una secuencia táctil completa. Una secuencia táctil tiene un evento touchBegin , cero o más eventos touchMove y un evento touchEnd , todos con el mismo valor de touchPointID .

El siguiente ejemplo establece una variable touchMoveID para probar el valor correcto de touchPointID antes de responder a un evento de movimiento. En caso contrario, otra entrada táctil activará el controlador de eventos también. Tenga en cuenta que los detectores de las fases de movimiento y final se encuentran en el escenario, no en el objeto de visualización. El escenario detecta fases de movimiento o final en caso de que la acción táctil del usuario vaya más allá de los límites del objeto de visualización.
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 
var mySprite:Sprite = new Sprite(); 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0,0,40,40); 
addChild(mySprite); 
var myTextField:TextField = new TextField(); 
addChild(myTextField); 
myTextField.width = 200; 
myTextField.height = 20; 
var touchMoveID:int = 0; 
 
mySprite.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin); 
function onTouchBegin(event:TouchEvent) { 
    if(touchMoveID != 0) { 
        myTextField.text = "already moving. ignoring new touch";     
        return; 
    } 
    touchMoveID = event.touchPointID; 
 
    myTextField.text = "touch begin" + event.touchPointID; 
    stage.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove); 
    stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd); 
} 
function onTouchMove(event:TouchEvent) { 
    if(event.touchPointID != touchMoveID) { 
        myTextField.text = "ignoring unrelated touch"; 
        return; 
    } 
    mySprite.x = event.stageX; 
    mySprite.y = event.stageY; 
    myTextField.text = "touch move" + event.touchPointID; 
} 
function onTouchEnd(event:TouchEvent) { 
    if(event.touchPointID != touchMoveID) { 
        myTextField.text = "ignoring unrelated touch end"; 
        return; 
    } 
    touchMoveID = 0; 
    stage.removeEventListener(TouchEvent.TOUCH_MOVE, onTouchMove); 
    stage.removeEventListener(TouchEvent.TOUCH_END, onTouchEnd); 
    myTextField.text = "touch end" + event.touchPointID; 
}