tout d'abord, Bonjour moi c'est az-steak! (comme c'est subtilement indiqué dans le post)
Trève de présentation, j'explique mon problème.
Alors voilà, j'ai depuis quelque mois un petit problème que voici :
Je code une application java utilisant Opengl. J'utilise, afin de déplacer la caméra, un objet et un Thread dont voici les rôles:
- L'objet a plusieurs paramètres booléens qui changent selon si une touche du clavier est pressée ou non
- et le Thread lit ces valeur et déplace ma caméra en conséquence
Le problème vient de mon thread qui ressemble à ça
SAUF QUE, le thread ne détecte jamais de changement et n'entre jamais dans une des conditions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 public class SmoothKeyListener extends Thread{ opengl dessin; Clavier input; float speed=0.00001f; boolean loop = true; SmoothKeyListener(opengl dessin,Clavier input){ this.dessin = dessin; this.input = input; } public void run(){ while(loop){ if(input.forward){ dessin.deplacerCam(0,0,speed); } if(input.backward){ dessin.deplacerCam(0,0,-speed); } if(input.left){ dessin.deplacerCam(speed,0,0); } if(input.right){ dessin.deplacerCam(-speed,0,0); } } } }
On pourrais penser que le problème vient de ma classe Clavier SAUF QUE, comme je l'ai dis j'ai ce problème depuis quelques mois et j'utilisais jusque là une solution provisoire que voici (attention la nuance est subtile les amis!)
Et là, ça fonctionne!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 public class SmoothKeyListener extends Thread{ opengl dessin; Clavier input; float speed=0.00001f; boolean loop = true; SmoothKeyListener(opengl dessin,Clavier input){ this.dessin = dessin; this.input = input; } public void run(){ while(loop){ System.out.println(input.forward); /////// la différence est juste là!! if(input.forward){ dessin.deplacerCam(0,0,speed); } if(input.backward){ dessin.deplacerCam(0,0,-speed); } if(input.left){ dessin.deplacerCam(speed,0,0); } if(input.right){ dessin.deplacerCam(-speed,0,0); } } } }
Je sais bien que cette solution n'est pas cool, mais même après d'infructueuses recherches et m'être frappé l'occiput à multiples reprises je n'ai jamais pu trouver de meilleure solution.
Le problème de cette solution est que cela ralentit considérablement mon thread de faire un print à chaque itération et de fait le mouvement de la caméra est saccadé.
J'implore donc votre aide afin de savoir si quelqu'un a déjà vu ce genre de problème et/ou pourrais aider à trouver une solution.
Partager