Verarbeitung von Berührungsereignissen

Flash Player 10.1 und höher, Adobe AIR 2 und höher

Einfache Berührungsereignisse werden genau wie alle anderen Ereignisse (beispielsweise Mausereignisse) in ActionScript verarbeitet. Sie können auf eine Serie von Berührungsereignissen warten, die durch die Ereignistypkonstanten der TouchEvent-Klasse definiert sind.
Hinweis: Bei der Eingabe über mehrere Berührungspunkte (wie bei der Berührung eines Geräts mit mehreren Fingern) löst der erste Kontaktpunkt ein Mausereignis und ein Berührungsereignis aus.
Verarbeiten eines einfachen Berührungsereignisses:
  1. Stellen Sie die flash.ui.Multitouch.inputMode -Eigenschaft auf MultitouchInputMode.TOUCH_POINT ein, damit Ihre Anwendung Berührungsereignisse verarbeiten kann.

  2. Fügen Sie einen Ereignis-Listener an eine Instanz einer Klasse an, die Eigenschaften von der InteractiveObject-Klasse erbt, wie beispielsweise Sprite oder TextField.

  3. Geben Sie den Typ des zu verarbeitenden Berührungsereignisses an.

  4. Rufen Sie eine Ereignisprozedurfunktion auf, die auf das Ereignis reagiert.

Mit dem folgenden Code wird beispielsweise eine Meldung eingeblendet, wenn der Benutzer auf einem berührungsempfindlichen Bildschirm auf das mySprite-Quadrat tippt.

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

Eigenschaften von Berührungsereignissen

Wenn ein Ereignis auftritt, wird ein Ereignisobjekt erstellt. Das TouchEvent-Objekt enthält Informationen zur Position und zu den Bedingungen des Berührungsereignisses. Sie können diese Informationen über die Eigenschaften des Ereignisobjekts abrufen.

Der folgende Code erstellt beispielsweise das TouchEvent-Objekt evt und zeigt dann die stageX -Eigenschaft des Ereignisobjekts (die x-Koordinate des Punkts auf der Bühne, der berührt wurde) im Textfeld an:

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); 
}
Im Eintrag zur TouchEvent -Klasse wird beschrieben, welche Eigenschaften über das Ereignisobjekt zur Verfügung stehen.
Hinweis: Nicht alle TouchEvent-Ereignisse werden in allen Laufzeitumgebungen unterstützt. So können beispielsweise nicht alle berührungsempfindlichen Geräte die Stärke des Drucks erkennen, die der Benutzer auf den Touchscreen ausübt. Die TouchEvent.pressure -Eigenschaft wird deshalb auf diesen Geräten nicht unterstützt. Überprüfen Sie, ob bestimmte Eigenschaften unterstützt werden, um sicherzustellen, dass Ihre Anwendung funktioniert. Weitere Informationen finden Sie unter Fehlerbehebung .

Phasen eines Berührungsereignisses

Verfolgen Sie Berührungsereignisse während der verschiedenen Phasen innerhalb und außerhalb eines InteractiveObject, genau wie bei Mausereignissen. Verfolgen Sie Berührungsereignisse auch am Anfang, im Verlauf und am Ende einer Berührungsinteraktion. Die TouchEvent-Klasse bietet Werte zur Verarbeitung der Ereignisse touchBegin , touchMove und touchEnd .

Beispielsweise können Sie Benutzern mithilfe der Ereignisse touchBegin , touchMove und touchEnd visuelles Feedback bereitstellen, wenn sie ein Anzeigeobjekt berühren und verschieben:

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; 
}
Hinweis: Der Listener für die anfängliche Berührung ist an mySprite angefügt, bei den Listenern für das Verschieben und für das Ende des Berührungsereignisses ist dies jedoch nicht der Fall. Wenn der Benutzer seinen Finger oder das Zeigegerät vor das Anzeigeobjekt verschiebt, wartet die Bühne weiterhin auf das Berührungsereignis.

Berührungspunkt-ID

Die TouchEvent.touchPointID -Eigenschaft ist beim Schreiben von Anwendungen, die auf die Berührungseingabe reagieren, ein wichtiger Bestandteil. Die Flash-Laufzeit weist jedem Berührungspunkt einen eindeutigen touchPointID -Wert zu. Wenn eine Anwendung auf die Phasen oder die Bewegung einer Berührungseingabe reagiert, sollten Sie vor der Verarbeitung des Ereignisses immer die touchPointID überprüfen. Die Ziehmethoden für die Berührungseingabe der Sprite-Klasse verwenden die touchPointID -Eigenschaft als Parameter, damit die richtige Eingabeinstanz verarbeitet wird. Die touchPointID -Eigenschaft gewährleistet, dass eine Ereignisprozedur auf den richtigen Berührungspunkt reagiert. Andernfalls reagiert die Ereignisprozedur auf alle Instanzen eines Berührungsereignistyps (wie beispielsweise alle touchMove -Ereignisse) auf dem Gerät, wodurch ein unvorhersehbares Verhalten auftritt. Diese Eigenschaft ist besonders wichtig, wenn der Benutzer Objekte zieht.

Verwenden Sie die touchPointID -Eigenschaft zur Verarbeitung einer ganzen Berührungssequenz. Eine Berührungssequenz hat ein touchBegin -Ereignis, keine oder mehrere touchMove -Ereignisse und ein touchEnd -Ereignis. Alle diese Ereignisse haben denselben touchPointID -Wert.

Im folgenden Beispiel wird eine touchMoveID -Variable eingerichtet, um auf den richtigen touchPointID -Wert zu prüfen, bevor auf ein Berührungsverschiebungs-Ereignis reagiert wird. Andernfalls lösen auch andere Berührungseingaben diese Ereignisprozedur aus. Beachten Sie, dass sich die Listener für die Verschiebungs- und Endphasen auf der Bühne, nicht im Anzeigeobjekt befinden. Die Bühne wartet auf die Bewegungs- und Endphasen für den Fall, dass die Berührung über die Begrenzungen des Anzeigeobjekts hinausreicht.
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; 
}