Appui long sur une touche

Signaler
Messages postés
24
Date d'inscription
mardi 25 octobre 2005
Statut
Membre
Dernière intervention
5 juillet 2007
-
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
-
Bonjour,
J'ai réalisé le jeu Pong sous OpenGL.
Tout fonctionne sauf un truc...l'appui long sur les touches!
On joue à 2, lorsque quelqu'un reste appuyé sur une touche et que l'autre essaye de faire pareil, l'une des raquettes se bloque!
Comment réussir à gerer deux appuis long simultanément?

Merci!

6 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Les fonctions que tu utilises pour la clavier ne sont pas les bonnes.
Mais si tu précises pas avec quoi tu fais de l'opengl, on peut pas
t'aider.
Messages postés
65
Date d'inscription
dimanche 27 juillet 2003
Statut
Membre
Dernière intervention
21 avril 2006

Tu utilises le principe de l'incrémentation à chaque événement clavier, ce n'est pas une bonne méthode.
Il est plus judicieux de capter uniquement quand la touche est presser ou relacher. Comme ça, tu as juste à ajouter un timer, et tu verifie si la touche est appuyée ou non, et tu agis en conséquence. Ainsi, si plusieurs touche sont préssées simultanément, ça marche.

Donnes des nouvelles !
Messages postés
24
Date d'inscription
mardi 25 octobre 2005
Statut
Membre
Dernière intervention
5 juillet 2007

ouais ca doit etre ca le probleme!!!
peux tu m'expliquer comment faire ça?
Merci

Sinon j'utilise Dev CPP.
Voila un peu a quoi ressemble mon prog :

// fonction de call-back pour la gestion des événements clavier

GLvoid window_key(unsigned char key, int x, int y)
{
switch (key) {
case 0x1b:
exit(1);
break;

case 0x2b: // touche +
if (vitesse<1.5 && vitesse>=0.5)
vitesse=vitesse+0.5;
break;
Messages postés
24
Date d'inscription
mardi 25 octobre 2005
Statut
Membre
Dernière intervention
5 juillet 2007

case 'a': case 'A':
if(pos_raq1_y+3<=16){
pos_raq1_y+=2;
glutPostRedisplay();}
break;

case 'q': case 'Q':
if(pos_raq1_y-3>=-16){
pos_raq1_y-=2;
glutPostRedisplay();}
break;
Messages postés
65
Date d'inscription
dimanche 27 juillet 2003
Statut
Membre
Dernière intervention
21 avril 2006

tu gardes une variable globale pour chaque touche.

exemple

bool touche_A;

GLvoid window_key(unsigned char key, int x, int y)
{
switch (key) {
case 'a': case 'A':
touche_A= true;
glutPostRedisplay();}
break;
}

OnTimer() //toute les 20 millisecondes
{
if(touche_A)
{
if(pos_raq1_y+3<=16){
pos_raq1_y+=2;
}


}

et faut aussi capter quand la touche est relachée
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Attention, il ne faut pas utiliser la fonction glutKeyboard, mais
glutSpecialFunc et glutSpecialUpFunc qui vont etre appelé lorsqu'une
touche est appuyée et relachée.