---> 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/s2
selon 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