Calculer un angle à l’aide de 2 points
Dans le monde de la programmation, il arrive parfois souvent d’avoir recours aux maths ! Et là on regrette de ne pas avoir écouté les cours de trigo au lycée !
Je me suis rendu compte que sur internet la question était souvent posée, mais que les réponses étaient souvent floues voire inexistantes.
Notamment sur les forums de création de jeux vidéos. Pourtant le calcul tient sur une seule ligne à l’aide de la fonction ‘atan2′ disponible dans une très grande majorité des langages de programmation.
Pour ce calcul, les coordonnées de 2 points suffisent, la fonction se charge du reste.
Imaginons un point A (le héros de votre jeu) positionné en x1 et y1, et un point B (votre curseur), en x2 et y2.
Vous avez besoin de connaître un angle (en degré) afin qu’un projectile parte du point A pour aller dans la direction du point B.
float a = ((float)(Math.atan2 (y2-y1, x2-x1)*180.0d/Math.PI))+90.0f;
Ce bout de code est tiré de l’un de mes scripts développé en JAVA pour un jeu en 2D à l’aide de la puissante bibliothèque LWJGL.
Pour le déplacement du projectile c’est une autre histoire
.
SWT – Changer le style d’un champ texte ?
SWT est une bibliothèque graphique JAVA qui permet notamment de développer des interfaces (IHM), en utilisant les éléments (champs, boutons etc…) natifs du système d’exploitation. Plus d’infos ici et là.
Je ne vais pas épiloguer sur la puissance de cette bibliothèque que j’utilise pour le développement de mes applications JAVA. Je vais simplement vous faire part d’une astuce pour changer l’affichage d’un champ texte, c’est à dire, masquer (avec une *) ou afficher les caractères, à la demande. Ce type d’astuce est à mettre en place, par exemple dans des formulaires où il peut être nécessaire de saisir une longue chaine comme une clé WEP ou une passphrase destinée au cryptage.
Imaginons un formulaire avec deux champs « Passphrase » et « Passphrase (confirmer) », munis d’un bouton de type checkbox intitulé « Afficher les passphrases », ça tombe bien j’ai un exemple à vous montrer.
Nous voulons afficher les caractères en cochant cette fameuse case … rien de plus simple … en fait il y a une astuce! Avec SWT, nous pouvons définir des styles à affecter à tous nos éléments, pour un champ de type password il suffit de faire:
Text password = new Text (monShell, SWT.BORDER|SWT.PASSWORD);
C’est la constante SWT.PASSWORD qui va nous permettre d’afficher uniquement des points à la place des caractères réels. Oui mais voilà ! Nous avons besoin de basculer l’affichage de ces derniers, or lorsqu’un style est appliqué, il le reste indéfiniment! L’astuce consiste à contrôler les caractères affichés nous même, plutôt que passer par un style. Et pour cela, la méthode setEchoChar () de l’objet Text est exactement ce qu’il nous faut!
// ...
Text passphrase1 = new Text (grp, SWT.BORDER);
passphrase1.setEchoChar ('*');
// ...
Maintenant, comment basculer en affichage réel des caractères ? Rien de plus simple! Si vous avez bien regardé, la méthode setEchoChar () attend un paramètre de type char, donc, pourquoi pas récupérer celui par défaut, n’importe où dans notre code ?
// ... final char defEchoChar = passphrase1.getEchoChar (); // ...
Voici le code final:
// ...
passphrase1 = new Text (grp, SWT.BORDER);
final char defEchoChar = passphrase1.getEchoChar ();
passphrase1.setEchoChar ('*');
// ...
passphrase2 = new Text (grp, SWT.BORDER);
passphrase2.setEchoChar ('*');
// ...
check = new Button (grp, SWT.CHECK);
check.setText (" Afficher les passphrases");
// ...
check.addSelectionListener (new SelectionAdapter () {
public void widgetSelected (SelectionEvent e) {
if (check.getSelection ()) {
passphrase1.setEchoChar (defEchoChar);
passphrase2.setEchoChar (defEchoChar);
} else {
passphrase1.setEchoChar ('*');
passphrase2.setEchoChar ('*');
}
} // widgetSelected ();
});
// ...
Je n’ai volontairement pas mis tout le code, mais simplement l’essentiel. S’il existe un autre moyen, je suis bien entendu preneur !



