Gestion du Touch WP7 sous XNA

Je vais reprendre ici un article que j’avais écris pour le Labo .NET de SUPINFO.

Je faisais mes premiers tests Windows Phone sur une application intitulée « Shake My Music ». Le principe était de secouer son téléphone pour charger une musique aléatoirement. Elle est disponible sur le Marketplace  pour 99cts ou gratuitement en version d’essai .

Passons à l’article !

_______________________________________

Le nouvel OS mobile de Microsoft, Windows Phone 7, nous permet via l’écran tactile capacitif de gérer plusieurs points d’appuis. Nous allons voir dans cet article comment gérer cet écran au sein d’ XNA 4 et en faire une utilisation basique de détection de position.

Nous allons avoir besoin des logiciels et SDK suivants :

XNA Game Studio 4

Visual Studio 2010 + Windows Phone Tools

Maintenant voyons la marche à suivre pour la gestion du Touch. Tout d’abord, nous devons nous assurer que le Touch est disponible pour « lire » nos entrées dans la boucle Update.

TouchPanelCapabilities touchCap = TouchPanel.GetCapabilities();

if (touchCap.IsConnected)

{..}

Et l’on récupère l’état actuel du périphérique.

TouchCollection touches = TouchPanel.GetState();

 

On obtient donc une collection de « touches » (Points de pression) qui contient pour chaque touche ses coordonnées ainsi que l’état. Concernant ces états, il y a 4 possibilités :

-Invalid : Problème de reconnaissance
-Moved : La position a été mise à jour ou la position ne change pas
-Pressed : Il s’agit d’une nouvelle position
-Released : La position n’existe plus

 

Passons maintenant à la partie détection d’un appui sur l’écran.

 

if (touches.Count >= 1)

{

touchposition = (touches[0].Position);

}

 

Ici, on test si il y a au moins un point de pression de répertorier. Nous utilisons touchposition, qui est un Vector2 pour récupérer les coordonnées X et Y du point de pression. Attention ici il s’agit du point 0, l’écran du Windows Phone 7 peut gérer jusqu’à 4 points de pression. Il faudra donc penser lors du développement à tester les 4 points de pression. Ici à cause de l’émulateur seul le clic de la souris permet de simuler un point de pression. (Le nombre de point de pression possibles peut être vérifié via touchCap.MaximumTouchCount) .

Maintenant que nous avons ce Vector2 touchposition, nous pouvons l’utiliser comme nous voulons et très simplement. Par exemple pour afficher les coordonnées du point de pression.

Dans la boucle Draw, nous allons donc écrire les coordonnées du point de pression.

 

spriteBatch.Begin();

string positionX = string.Format(« X : {0} », touchposition.X);

spriteBatch.DrawString(font1, positionX,new Vector2(50,380), Color.White);

string positionY = string.Format(« Y : {0} », touchposition.Y);

spriteBatch.DrawString(font1, positionY,new Vector2(50,420), Color.White);

spriteBatch.End();

 

font1 est un SpriteFont que j’ai ajouté au projet, il correspond à la police Segoe UI Mono. Celle utilisée par défaut par Windows Phone 7.

 

Faisons un petit résumé du code, commençons par la boucle Update :

 

TouchPanelCapabilities touchCap = TouchPanel.GetCapabilities();

if (touchCap.IsConnected)

{

TouchCollection touches = TouchPanel.GetState();

if (touches.Count >= 1)

{

touchposition = (touches[0].Position);

}

}

Et la boucle Draw pour dessiner notre résultat :

 

GraphicsDevice.Clear(Color.Black);

spriteBatch.Begin();

string positionX = string.Format(« X : {0} », touchposition.X);

spriteBatch.DrawString(font1, positionX,new Vector2(50,380), Color.White);

string positionY = string.Format(« Y : {0} », touchposition.Y);

spriteBatch.DrawString(font1, positionY,new Vector2(50,420), Color.White);

spriteBatch.End();

Voyons maintenant en image ce que l’on vient de réaliser :

 

 

 

Premier screen : Lancement de l’application, pas d’appui coordonnées = 0
Second screen : Simulation d’un point de pression via un clic souris, mise à jour des coordonnées
Troisième screen : Autre clic, changement des coordonnées

Maintenant c’est à votre tour d’utiliser le Touch. A vos Visual Studio !

%d blogueurs aiment cette page :