Gestion des événements tactiles
Flash Player 10.1 et les versions ultérieures, Adobe AIR 2 et les versions ultérieures
ActionScript gère les événements tactiles de base comme tout autre événement (les événements de souris, par exemple). Vous pouvez écouter une série d’événements tactiles définis par les constantes de type d’événement de la
classe TouchEvent
.
Remarque :
dans le cas d’une saisie multipoint (toucher de plusieurs doigts un périphérique, par exemple), le premier point de contact distribue un événement de souris et un événement tactile.
Pour gérer un événement tactile de base :
-
Activez la gestion des événements tactiles dans l’application en définissant la propriété
flash.ui.Multitouch.inputMode
sur
MultitouchInputMode.TOUCH_POINT
.
-
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).
-
Indiquez le type d’événement tactile à gérer.
-
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 appuie brièvement sur le carré dessiné sur mySprite sur un écran tactile :
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);
}
Propriétés des événements tactiles
Lorsqu’il se produit un événement, un objet d’événement est créé. L’objet TouchEvent contient des informations sur l’emplacement et les conditions de l’événement tactile. Vous disposez des propriétés de l’objet d’événement pour récupérer ces informations.
Le code suivant crée par exemple un objet TouchEvent
evt
, puis affiche la propriété
stageX
de l’objet d’événement (la coordonnée x du point dans l’espace de scène où s’est produite l’action tactile) dans le champ de texte :
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);
}
Pour plus d’informations sur les propriétés disponibles via l’objet d’événement, voir la classe
TouchEvent
.
Remarque :
certains environnements d’exécution ne prennent pas en charge toutes les propriétés TouchEvent. Ainsi, certains périphériques tactiles ne sont pas en mesure de détecter la pression appliquée par l’utilisateur sur l’écran tactile. Ils ne prennent par conséquent pas en charge la propriété
TouchEvent.pressure
. 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 d’un événement tactile
Vous pouvez suivre les différentes phases des événements tactiles se produisant sur un objet interactif, mais aussi en dehors, exactement comme vous le feriez pour des événements de souris. Vous pouvez également suivre les événements tactiles du début à la fin d’une interaction tactile. La classe TouchEvent comporte des valeurs de gestion des événements
touchBegin
,
touchMove
et
touchEnd
.
Vous disposez par exemple des événements
touchBegin
,
touchMove
et
touchEnd
pour proposer à l’utilisateur un feedback visuel lorsqu’il touche et déplace un objet d’affichage :
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;
}
Remarque :
à l’encontre des écouteurs chargés de déplacer l’événement tactile et de mettre fin à celui-ci, l’écouteur d’événements tactiles initial est associé à mySprite. Si l’objet d’affichage précède le doigt de l’utilisateur ou le périphérique de pointage, la scène continue à écouter l’événement tactile.
ID de point tactile
La propriété
TouchEvent.touchPointID
est un composant fondamental de la programmation d’applications qui réagissent à la saisie tactile. Le moteur d’exécution de Flash affecte à chaque point tactile une valeur
touchPointID
unique. Lorsqu’une application réagit aux phases ou au mouvement d’une saisie tactile, vérifiez la valeur
touchPointID
avant de gérer l’événement. Les méthodes de déplacement par glissement de la saisie tactile de la classe Sprite utilisent la propriété
touchPointID
en tant que paramètre pour assurer le traitement de l’occurrence de saisie correcte. La propriété
touchPointID
vérifie qu’un gestionnaire d’événement réagit au point tactile approprié. Le gestionnaire d’événement réagit sinon à n’importe quelle occurrence du type d’événement tactile (tous les événements
touchMove
, par exemple) sur le périphérique, d’où un comportement imprévisible. La propriété est particulièrement importante lorsque l’utilisateur fait glisser des objets.
La propriété
touchPointID
permet de gérer une séquence entière d’actions tactiles. Une séquence d’actions tactile se compose d’un événement
touchBegin
, de zéro, un ou plusieurs événements
touchMove
et d’un événement
touchEnd
, qui possèdent tous la même valeur
touchPointID
.
L’exemple suivant définit une variable
touchMoveID
, qui vérifie que la valeur
touchPointID
est correcte avant de réagir à un événement de mouvement tactile. Si tel n’est pas le cas, d’autres actions tactiles déclenchent également le gestionnaire d’événement. Notez que les écouteurs associés aux phases de déplacement et de fin sont situés sur la scène, plutôt que l’objet d’affichage. La scène écoute les phases de déplacement et de fin au cas où l’action tactile de l’utilisateur dépasserait les limites de l’objet d’affichage.
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;
}
|
|
|
|
|