Libgdx Game

dimanche 30 septembre 2012

Manipulation des entrées 2eme partie #7


---> Introduction
---> L’accéléromètre
---> La boussole
---> Entrées Android :
         
         - La détection des gestes tactiles
         - Le bouton Menu et le bouton Retour
         - Le vibreur
         - Le clavier tactile


Introduction

En voilà arrivé à la deuxième partie du tutoriel manipulation des entrées, on va voir d’autres entrées que : le clavier, la souris, et le simple toucher tactile, des entrées qui ne peuvent être effectuées que sur un appareil mobile (Smartphone) et qui sont : l’accéléromètre, la boussole, des entrées avec des gestes en tactile, le bouton Menu et bouton Retour, le clavier tactile…


L’accéléromètre

L’accéléromètre mesure l’accélération de l’appareil mobile sur trois axes, cela permet d’utiliser l’orientation et l’inclinaison de l’appareil comme un outil d’entrer et de manipulation.
L’accélération est mesurée en mètre par seconde au carré. Voici comment les trois axes de mesure de l’accélération sont dirigés.
image prise du site officiel de Libgdx

La valeur de l’accélération se situe dans l’intervalle 10m/s2 et -10m/sselon la direction que prend l’axe, si l’axe se dirige vers le centre de la terre alors l’accélération sera 10m/s2 et si l’axe se dirige vers la direction opposée au centre de la terre alors l’accélération sera -10m/s2
Il faut savoir que cette configuration est différente pour les tablettes, voici comment est la direction des trois axes pour les tablettes :

Heureusement que Libgdx prend en charge cette différence et cela par présenter les lectures de l’accéléromètre comme  le montre l’image 1  Quel que soit l’orientation par défaut de l’appareil.

* Pour vérifier la disponibilité de l’accéléromètre dans l’appareil :
boolean disponible;
disponible = Gdx.input.isPeripheralAvailable(Peripheral.Accelerometer);

* Pour s’interroger sur le type de l’orientation par défaut de l’appareil (mode portrait image1 mode paysage image2) :
Orientation nativeOrientation;
nativeOrientation = Gdx.input.getNativeOrientation();

* Pour la lecture de l’accélération de l’appareil cela n’est possible qu’à travers le polling :
float accX,accY,accZ;
accX = Gdx.input.getAccelerometerX();
accY = Gdx.input.getAccelerometerY();
accZ = Gdx.input.getAccelerometerZ();


La boussole

Grace à un capteur de champs magnétique intégré dans les appareils mobiles on peut savoir la manière avec laquelle l’appareil est orienté par rapport au Nord
La boussole possède trois angles mesurés en degré :

Azimut : est l'angle d'orientation de l'appareil autour de l'axe z. L’axe z pointe vers le centre de la Terre.
Pitch : est l'angle d'orientation de l'appareil autour de l'axe des x. L'axe x pointe vers  l'ouest et il est perpendiculaire à l'axe z et l'axe y.
Roll est l'angle d'orientation de l'appareil autour de l'axe y. L'axe y pointe vers le pôle nord magnétique de la terre tout en restant perpendiculaire aux deux autres axes.

Voici une image illustrant la direction des trois axes :

Image prise du site officiel de Libgdx

* Pour savoir si la boussole est disponible :
boolean disponible = Gdx.input.isPeripheralAvailable(Peripheral.Compass);  

* Pour avoir l’état de la boussole (les valeurs des trois angles)
float azimuth = Gdx.input.getAzimuth();
float pitch = Gdx.input.getPitch();
float roll = Gdx.input.getRoll();

Entrées Android

Nous avons vu dans la première partie les entrées communes pour les deux plateformes i.e. les entrées qui peuvent être effectué à partir du Desktop et Android. Maintenant, dans cette deuxième partie, on va voir des entrées uniques pour la plateforme Android .

La détection des gestes tactiles

Un écran tactile peut détecter pas mal de geste s’effectuant avec les doigts tel que :
Un pressement, un double pressement, un pressement long, un pincement pour indiquer un zoom… Pour cela Libgdx fournit une classe GestureDetector Qui permet de détecter les gestes suivants :

Appyuer/toucher (tap) : un utilisateur touche l'écran et lève le doigt à nouveau. Pour qu’un toucher (tap) soit enregistré, le doigt ne doit pas se déplacer à l'extérieur d'une zone carré spécifié autour de la position initiale. Plusieurs tap consécutives peuvent être détectés si  l'utilisateur effectue ses taps dans un intervalle de temps spécifié.
Pan (défiler) : Un utilisateur fait glisser un doigt sur ​​l'écran. Le détecteur signalera les coordonnées de la position touchée ainsi que la différence (le delta) entre les positions tactiles actuelles et antérieures.
balayer (fling) : Un utilisateur fait glisser un doigt sur ​​l'écran, puis le souleva. Utile pour mettre en œuvre les mouvements de glissement.
Zoom : Un utilisateur met deux doigts sur l'écran et les déplace ensemble/appart. Le détecteur renvoi à la fois la distance initiale et la distante courante en pixels.
Pincer/dézoomer (pintch) : Similaire au zoom, sauf que le détecteur signale la position des doigts initiales et courantes au lieu de signaler la distance entre les doigts. Ce geste peut être utile pour détecter d’autres gestes.

* Pour détecter ces gestes tactiles il faut implémenter l’interface GestureListener et redéfinir toutes ses méthodes
public class DetecteurGeste implements GestureListener {

         @Override
         public boolean touchDown (int x, int y, int pointeur) {
            return false;
         }

         @Override
         public boolean tap (int x, int y, int nombre) {
            return false;
         }

         @Override
         public boolean longPress (int x, int y) {
            return false;
         }

         @Override
         public boolean fling (float velociteX, float velociteY) {
            return false;
         }

         @Override
         public boolean pan (int x, int y, int deltaX, int deltaY) {
            return false;
         }

         @Override
         public boolean zoom (float DistanceInitial, float DistanceActuel) {
            return false;
         }

         @Override
         public boolean pinch (Vector2 posInitialPremierDoigt, Vector2 posInitialDeuxiemeDoigt, Vector2 posActuelPremierDoigt, Vector2 posActuelDeuxiemeDoigt) {
            return false;
         }
      }

Une fois l’interface implémentée et ces méthodes définies, on doit instancier la classe implémentant cette interface, et l’indiquer à Libgdx :
DetecteurGeste monDetecteurGeste = new DetecteurGeste();
Gdx.input.setInputProcessor(new GestureDetector (monDetecteurGeste));

Une fois l’objet indiqué à Libgdx, chaque geste pourra être détecté.

Le bouton Menu et le bouton Retour

Quand un utilisateur appuie sur le bouton Retour du Smartphone ceci va engendrer la fin de l’activité en cours d’exécution sur le téléphone mobile. Si à travers mon jeux/app je désire afficher une boite de dialogue de confirmation ou proposé à mon utilisateur de sauvegarder la partie il faut arrêter le fonctionnement du bouton Retour et cela en attrapant la clé du bouton et faire en sorte qu’elle ne soit pas répercutée par le système d’exploitation, ceci est très simple à faire avec libgdx

* Pour arrêter le fonctionnement du bouton Retour
Gdx.input.setCatchBackKey(true);

On peut aussi et de la même façon arrêter le fonctionnement du bouton Menu qui se situe presque dans tous les Smartphones.
* Pour arrêter le fonctionnement du bouton Retour
Gdx.input.setCatchMenuKey(true);

Le Vibreur

Bien que le vibreur n’est pas réellement une entrée mais on va le présenté avec les entrées Android. Le vibreur permet de faire vibrer le téléphone de l’utilisateur, et pour utiliser le vibreur il faut bien évidemment une autorisation qui doit être effectuée dans le fichier manifest
Pour spécifier une autorisation pour le vibreur ceci est très simple, if faut d’abord accéder au fichier manifest se situant dans le projet Android puis cliquer sur l’onglet Permissions se trouvant juste en bas, une fois là-dedans appuyer sur add et sélectionner  Uses Permissions, maintenant il reste qu’à sélectionner l’attribut se nommant android.permission.VIBRATE et sauvegarder avec un ctrl + s
Cette image illustre les étapes à suivre pour l’autorisation sur le manifest


* Pour faire vibrer le téléphone pendant deux secondes
Gdx.input.vibrate(2000);
Le paramètre est donné en milliseconde.

* Pour utiliser le vibreur avec une manière plus sophistiquée
Gdx.input.vibrate(new long[] { 0, 400, 500, 400}, -1);
Ceci va faire vibrer le téléphone pendant 400 ms puis va s’arrêter de vibrer pendant 500 ms puis il va vibrer une autre fois pendant 400 ms. Et le deuxième paramètre c’est pour la répétition.

Le Clavier tactile

La majorité des appareils Android ne dispose pas de clavier physique, et à la place on utilise un clavier tactile.

* Pour faire apparaitre le clavier tactile
Gdx.input.setOnscreenKeyboardVisible(true);
Une touche sera détectée comme étant un évènement


Conclusion

Ainsi se termine la deuxième partie du tutoriel Manipulation des entrées avec libgdx.
Si vous avez des remarques ou des questions n’hésitez pas à les poster en commentaire. Merci pour votre lecture.



Aucun commentaire:

Enregistrer un commentaire