Appui long sur une touche

pofipofo Messages postés 24 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 5 juillet 2007 - 2 mars 2006 à 11:03
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 2 mars 2006 à 15:03
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

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
2 mars 2006 à 12:29
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.
0
kortin Messages postés 65 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 21 avril 2006
2 mars 2006 à 12:37
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 !
0
pofipofo Messages postés 24 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 5 juillet 2007
2 mars 2006 à 14:14
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;
0
pofipofo Messages postés 24 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 5 juillet 2007
2 mars 2006 à 14:14
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;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kortin Messages postés 65 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 21 avril 2006
2 mars 2006 à 14:19
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
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
2 mars 2006 à 15:03
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.
0
Rejoignez-nous