Tratamento de eventos de toque
Flash Player 10.1 e posterior, Adobe AIR 2 e posterior
Eventos básicos de toque são manipulados da mesma forma que os outros eventos como, por exemplo, eventos de mouse no ActionScript. Você pode monitorar uma série de eventos de toque definidos pelas constantes de tipo de evento na
classe TouchEvent
.
Nota:
Para entrada de ponto de diversos toques (tocar o dispositivo com mais de um dedo), o primeiro ponto de contato envia um evento de mouse e de toque.
Para manipular um evento de toque básico:
-
Configure seu aplicativo para manipular eventos de toque, definindo a propriedade
flash.ui.Multitouch.inputMode
para
MultitouchInputMode.TOUCH_POINT
.
-
Anexe um ouvinte de evento à uma instância de uma classe que herda propriedades da classe InteractiveObject como, por exemplo, Sprite ou TextField.
-
Especifique o tipo de evento de toque a ser manipulado.
-
Chame a função do manipulador do evento para responder ao evento.
O exemplo a seguir exibe uma mensagem quando o quadrado desenhado em mySprite é ativado em uma tela sensível ao toque:
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);
}
Propriedade de Evento de toque
Um objeto evento é criado quando ocorre um evento. O objeto TouchEvent contém informações sobre o local e as condições do evento de toque. Você pode utilizar as propriedades do objeto de evento para obter essas informações.
Por exemplo, o código a seguir cria um objeto TouchEvent
evt
e, em seguida, exibe a propriedade
stageX
do objeto de evento (a coordenada x do ponto no espaço do Palco onde o toque ocorreu) no 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 a classe
TouchEvent
para obter as propriedades disponíveis por meio do objeto de evento.
Nota:
Nem todas as propriedades TouchEvent possuem suporte em todos os ambientes de tempo de execução. Por exemplo, nem todos os dispositivos sensíveis ao toque são capazes de detectar a pressão que o usuário está aplicando na tela. Dessa forma, a propriedade
TouchEvent.pressure
não possui suporte em todos estes dispositivos. Tente testar o suporte de uma propriedade específica para verificar se o aplicativo funciona e, em seguida, consulte
Solução de problemas
para obter mais informações.
Fases de evento de toque
Monitore eventos de toque por meio de diversos estágios externos e sobre InteractiveObject, de forma similar a eventos de mouse. Monitore eventos de toque pelo início, meio e fim da interação de toque. A classe TouchEvent fornece valores para manipular eventos
touchBegin
,
touchMove
e
touchEnd
.
Por exemplo, é possível utilizar os eventos
touchBegin
,
touchMove
e
touchEnd
para fornecer ao usuário um feedback visual, conforme ele toca e move um objeto de exibição:
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:
O ouvinte de toque inicial está anexado à mySprite, mas os ouvintes de movimento e finalização do evento de toque não estão anexados. Se o dedo do usuário ou dispositivo apontador mover-se acima do objeto de exibição, o Palco continua a monitorar o evento de toque.
ID do ponto de toque
A propriedade
TouchEvent.touchPointID
é parte essencial da programação de aplicativos que respondem à entrada de toque. O tempo de execução do Flash atribui a cada ponto de toque, um valor
touchPointID
exclusivo. Sempre que um aplicativo responder às fases ou movimentos de entrada de toque, consulte
touchPointID
antes de manipular o evento. Os métodos de arrastas a entrada de toque da classe Sprite utilizam a propriedade
touchPointID
como parâmetro, de forma que a instância de entrada correta seja manipulada. A propriedade
touchPointID
garante que o manipulador de evento responda ao ponto de toque correto. De outra forma, o manipulador de evento responde a qualquer instância do tipo de evento de toque (como, por exemplo, todos os eventos
touchMove
) no dispositivo, criando um comportamento imprevisível. A propriedade é especialmente importante quando o usuário está arrastando objetos.
Utilize a propriedade
touchPointID
para gerenciar uma sequência inteira de toque. Uma sequência de toque possui um evento
touchBegin
, zero ou mais eventos
touchMove
e um evento
touchEnd
que possuem o mesmo valor
touchPointID
.
O exemplo a seguir estabelece a variável
touchMoveID
para testar o valor correto
touchPointID
antes de responder a um evento de movimento de toque. De outra forma, outras entradas de toque disparam o manipulador de eventos também. Observe que os ouvintes das fases de movimento e fim estão no palco mas o objeto de exibição não. O palco monitora as fases de movimento ou fim, no caso do toque do usuário mover-se além dos limites do objeto de exibição.
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;
}
|
|
|
|
|