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:
  1. Configure seu aplicativo para manipular eventos de toque, definindo a propriedade flash.ui.Multitouch.inputMode para MultitouchInputMode.TOUCH_POINT .

  2. Anexe um ouvinte de evento à uma instância de uma classe que herda propriedades da classe InteractiveObject como, por exemplo, Sprite ou TextField.

  3. Especifique o tipo de evento de toque a ser manipulado.

  4. 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; 
}