Gestione eventi di tocco

Flash Player 10.1 e versioni successive, Adobe AIR 2 e versioni successive

Gli eventi di tocco di base vengono gestiti allo stesso modo degli altri eventi, ad esempio gli eventi del mouse, in ActionScript. Potete intercettare una serie di eventi di tocco definiti dalle costanti del tipo di evento nella classe TouchEvent .
Nota: per l'input punto di tocco multiplo (ad esempio, toccare un dispositivo con più dita), il primo punto di contatto invia un evento del mouse e un evento di tocco.
Per gestire eventi di tocco di base:
  1. Configurate l'applicazione per gestire eventi di tocco impostando la proprietà flash.ui.Multitouch.inputMode su MultitouchInputMode.TOUCH_POINT .

  2. Allegate un listener di eventi a un'istanza di una classe che eredita le proprietà dalla classe InteractiveObject, ad esempio Sprite o TextField.

  3. Specificate il tipo di evento di tocco da gestire.

  4. Chiamate una funzione gestore di eventi per eseguire un'azione in risposta all'evento.

Ad esempio, il codice seguente visualizza un messaggio quando il quadrato disegnato in mySprite viene toccato su uno schermo abilitato al tocco:

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); 
}

Proprietà evento di tocco

Quando si verifica un evento, viene creato un oggetto evento. L'oggetto TouchEvent contiene informazioni sulla posizione e le condizioni dell'evento di tocco. Potete utilizzare le proprietà dell'oggetto evento per recuperare le informazioni.

Ad esempio, il codice seguente crea un oggetto TouchEvent evt e quindi visualizza la proprietà stageX dell'oggetto evento (la coordinata x nel punto dello spazio dello stage in cui si è verificato il tocco) nel campo di testo:

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); 
}
Per informazioni sulle proprietà disponibili mediante l'oggetto evento, vedete la classe TouchEvent .
Nota: non tutte le proprietà TouchEvent sono supportate in tutti gli ambienti di runtime. Ad esempio, non tutti i dispositivi abilitati al tocco sono in grado di rilevare l'intensità della pressione applicata dall'utente sullo schermo sensibile. Pertanto, la proprietà TouchEvent.pressure non è supportata in questi dispositivi. Controllate il supporto proprietà specifico per verificare che l'applicazione funzioni e vedete Risoluzione dei problemi per ulteriori informazioni.

Fasi evento di tocco

Tenete traccia delle varie fasi degli eventi di tocco entro e al di fuori di un InteractiveObject analogamente agli eventi del mouse. Inoltre, tenete traccia degli eventi di tocco mediante l'inizio, la parte centrale e la fine dell'interazione di tocco. La classe TouchEvent fornisce valori per la gestione degli eventi touchBegin , touchMove e touchEnd .

Ad esempio, potete utilizzare gli eventi touchBegin , touchMove e touchEnd per fornire all'utente un feedback visivo quando tocca e sposta un oggetto di visualizzazione:

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: a differenza del listener di tocco iniziale, i listener per lo spostamento e il termine dell'evento di tocco non sono allegati a mySprite. Se il dito o il dispositivo di puntamento dell'utente vengono spostati davanti all'oggetto di visualizzazione, lo Stage continua a intercettare l'evento di tocco.

ID punto di tocco

La proprietà TouchEvent.touchPointID è una parte essenziale della scrittura di applicazioni che rispondono all'input tocco. Il runtime Flash assegna a ogni punto di tocco un valore touchPointID univoco. Ogni volta che un'applicazione risponde alle fasi o movimento dell'input tocco, controllate touchPointID prima di gestire l'evento. I metodi di trascinamento dell'input tocco della classe Sprite utilizzano la proprietà touchPointID come un parametro, per cui viene gestita l'istanza di input corretta. La proprietà touchPointID garantisce che un gestore eventi risponde al punto di tocco corretto. In caso contrario, il gestore eventi risponde a qualsiasi istanza del tipo evento di tocco (ad esempio, tutti gli eventi touchMove ) sul dispositivo, generando un comportamento imprevedibile. La proprietà è particolarmente importante quando l'utente trascina oggetti.

Utilizzate la proprietà touchPointID per gestire un'intera sequenza di tocco. Una sequenza di tocco contiene un unico evento touchBegin , zero o più eventi touchMove e un unico evento touchEnd , caratterizzati tutti dallo stesso valore touchPointID .

Nell'esempio seguente viene creata una variabile touchMoveID per verificare che il valore touchPointID sia corretto prima di rispondere a un evento di tocco. In caso contrario, anche altri input tocco attivano il gestore eventi. Osservate che sullo stage si trovano i listener per le fasi di spostamento e termine, ma non l'oggetto di visualizzazione. Lo stage intercetta le fasi di spostamento e termine nel caso in cui il tocco dell'utente si sposti oltre i limiti dell'oggetto di visualizzazione.
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; 
}