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:
-
Defina la aplicación para que gestione eventos táctiles estableciendo la propiedad
flash.ui.Multitouch.inputMode
como
MultitouchInputMode.TOUCH_POINT
.
-
Asocie un detector de eventos a la instancia de una clase que herede propiedades de la clase InteractiveObject, por ejemplo, Sprite o TextField.
-
Especifique el tipo de evento táctil para gestionar.
-
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;
}
|
|
|
|
|