Gestion des événements de mouvement

Flash Player 10.1 et les versions ultérieures, Adobe AIR 2 et les versions ultérieures

Traitez les événements de mouvement comme tout événement tactile de base. Vous pouvez écouter une série d’événements de mouvement définis par les constantes de type d’événement dans la classe TransformGestureEvent , la classe GestureEvent et la classe PressAndTapGestureEvent .

Pour gérer un événement tactile de mouvement :
  1. Activez la prise en charge de la saisie par mouvement dans l’application en définissant la propriété flash.ui.Multitouch.inputMode sur MultitouchInputMode.GESTURE .

  2. Associez un écouteur d’événements à une occurrence de classe qui hérite des propriétés de la classe InteractiveObject (Sprite ou TextField, par exemple).

  3. Indiquez le type d’événement de mouvement à gérer.

  4. Appelez une fonction de gestionnaire d’événement en réponse à l’événement.

Le code suivant affiche par exemple un message lorsque l’utilisateur effectue un mouvement de glissement sur le carré dessiné sur mySprite sur un écran tactile :

Multitouch.inputMode=MultitouchInputMode.GESTURE; 
 
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(TransformGestureEvent.GESTURE_SWIPE, swipehandler); 
 
function swipehandler(evt:TransformGestureEvent): void { 
myTextField.text = "I've been swiped"; 
myTextField.y = 50; 
addChild(myTextField); 
}

Les événements d’appui double sont gérés de la même façon, mais font appel à la classe GestureEvent :

Multitouch.inputMode=MultitouchInputMode.GESTURE; 
 
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(GestureEvent.    GESTURE_TWO_FINGER_TAP, taphandler); 
 
function taphandler(evt:GestureEvent): void { 
myTextField.text = "I've been two-finger tapped"; 
myTextField.y = 50; 
addChild(myTextField); 
}

Les événements d’appui-appui bref sont également gérés de la même façon, mais font appel à la classe PressAndTapGestureEvent :

Multitouch.inputMode=MultitouchInputMode.GESTURE; 
 
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(PressAndTapGestureEvent.        GESTURE_PRESS_AND_TAP, taphandler); 
 
function taphandler(evt:PressAndTapGestureEvent): void { 
myTextField.text = "I've been press-and-tapped"; 
myTextField.y = 50; 
addChild(myTextField); 
}
Remarque : certains environnements d’exécution ne prennent pas en charge tous les types d’événements GestureEvent, TransformGestureEvent et PressAndTapGestureEvent. Ainsi, certains périphériques tactiles ne sont pas en mesure de détecter un mouvement de glissement à plusieurs doigts. Les événements gestureSwipe de la classe InteractiveObject ne sont donc pas pris en charge par ces périphériques. Essayez de vérifier la prise en charge d’événements spécifiques pour assurer le fonctionnement de l’application. Pour plus d’informations, voir Résolution des problèmes .

Propriétés des événements de mouvement

Les événements de mouvement gèrent moins de propriétés que les événements tactiles de base. Vous y accédez de la même façon, par le biais de l’objet d’événement de la fonction du gestionnaire d’événement.

Le code suivant fait par exemple pivoter mySprite lorsque l’utilisateur effectue dessus un mouvement de rotation. Le champ de texte indique le facteur de rotation appliqué depuis le dernier mouvement (lorsque vous testez ce code, faites-le pivoter plusieurs fois pour visualiser les changements de valeur) :

Multitouch.inputMode=MultitouchInputMode.GESTURE; 
 
var mySprite:Sprite = new Sprite(); 
var mySpriteCon:Sprite = new Sprite(); 
var myTextField:TextField = new TextField(); 
myTextField.y = 50; 
addChild(myTextField); 
 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(-20,-20,40,40); 
mySpriteCon.addChild(mySprite); 
mySprite.x = 20; 
mySprite.y = 20; 
addChild(mySpriteCon); 
 
mySprite.addEventListener(TransformGestureEvent.GESTURE_ROTATE, rothandler); 
 
function rothandler(evt:TransformGestureEvent): void { 
evt.target.parent.rotationZ += evt.target.rotation; 
myTextField.text = evt.target.parent.rotation.toString(); 
}
Remarque : certains environnements d’exécution ne prennent pas en charge toutes les propriétés TransformGestureEvent. Ainsi, certains périphériques tactiles ne sont pas en mesure de détecter la rotation d’un mouvement à l’écran. Ils ne prennent par conséquent pas en charge la propriété TransformGestureEvent.rotation . Essayez de tester la prise en charge de propriétés spécifiques pour assurer le fonctionnement de l’application. Pour plus d’informations, voir Résolution des problèmes .

Phases de mouvement

Les événements de mouvement peuvent également être suivis par phases, vous permettant ainsi de suivre les propriétés au fur et à mesure que le mouvement est exécuté. Vous pouvez par exemple suivre les coordonnées x lorsqu’un objet est déplacé par le biais d’un mouvement de glissement. Utilisez ces valeurs pour tracer une ligne qui relie tous les points de son chemin, une fois le glissement terminé. Vous pouvez également modifier visuellement un objet d’affichage lorsqu’il traverse l’écran par glissement via un mouvement panoramique. Modifiez à nouveau l’objet une fois le mouvement panoramique terminé.
Multitouch.inputMode = MultitouchInputMode.GESTURE; 
var mySprite = new Sprite(); 
mySprite.addEventListener(TransformGestureEvent.GESTURE_PAN , onPan); 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0, 0, 40, 40); 
var myTextField = new TextField(); 
myTextField.y = 200; 
addChild(mySprite); 
addChild(myTextField); 
 
function onPan(evt:TransformGestureEvent):void { 
 
    evt.target.localX++; 
 
if (evt.phase==GesturePhase.BEGIN) { 
    myTextField.text = "Begin"; 
    evt.target.scaleX *= 1.5; 
    evt.target.scaleY *= 1.5; 
} 
if (evt.phase==GesturePhase.UPDATE) { 
    myTextField.text = "Update"; 
    evt.target.alpha = 0.5; 
} 
if (evt.phase==GesturePhase.END) { 
    myTextField.text = "End"; 
    evt.target.width = 40; 
    evt.target.height = 40; 
    evt.target.alpha = 1; 
} 
}
Remarque : la fréquence de la phase de mise à jour varie selon l’environnement du moteur d’exécution. Certaines combinaisons système d’exploitation et matériels ne retransmettent aucune mise à jour.

La phase de mouvement correspond à « all » pour les événements de mouvement simples

Certains objets ne suivent pas chaque phase de l’événement de mouvement associé. Ils insèrent plutôt la valeur « all » dans la propriété de la phase de l’objet d’événement. Les mouvements simples tels qu’un glissement et un double appui ne suivent pas l’événement en plusieurs phases. Une fois l’événement distribué, la propriété phase de l’objet d’événement interactif qui écoute l’événement gestureSwipe ou gestureTwoFingerTap correspond toujours à all :

Multitouch.inputMode = MultitouchInputMode.GESTURE; 
var mySprite = new Sprite(); 
mySprite.addEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe); 
mySprite.addEventListener(GestureEvent.GESTURE_TWO_FINGER_TAP, onTwoTap); 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0, 0, 40, 40); 
var myTextField = new TextField(); 
myTextField.y = 200; 
addChild(mySprite); 
addChild(myTextField); 
 
function onSwipe(swipeEvt:TransformGestureEvent):void { 
    myTextField.text = swipeEvt.phase // Output is "all" 
} 
function onTwoTap(tapEvt:GestureEvent):void { 
    myTextField.text = tapEvt.phase // Output is "all" 
}