Opengl/glut Gestion du clavier (plusieurs touches)

cs_gravel Messages postés 8 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 14 avril 2005 - 25 févr. 2005 à 19:43
cs_gravel Messages postés 8 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 14 avril 2005 - 2 mars 2005 à 05:47
Bonjours, je cherche un moyen de géré plusieur touche en meme
temps. j'ai chercher un peux partout lit beaucoup de document sur la
gestion du clavier mais aucun marche pour plusieur touche en meme temps
: Pour l'instant je fais.



dans mon main.cpp:



glutKeyboardFunc(Keyboard);

glutSpecialFunc(Special);

dans mon clavier.h



void Keyboard(unsigned char key, int x, int y) {

}



void Special(int key,int x,int y) {

if (!gameover) if (!pause) {

if ( key == GLUT_KEY_UP ) if(spaceship.posy<500) spaceship.posy+=8; // ne marche pas a verifier

if ( key == GLUT_KEY_DOWN ) if(spaceship.posy>100) spaceship.posy-=8; //ne marche pas a verifier

if ( key == GLUT_KEY_RIGHT ) if(spaceship.posx<720) spaceship.posx+=8;

if ( key == GLUT_KEY_LEFT ) if(spaceship.posx>0) spaceship.posx-=8;

}

}

Pourquoi je ne peux avoir plusieur touche en meme temps?

3 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
25 févr. 2005 à 21:23
Si tu mets rien dans la fonction keyboard, autant ne pas la mettre.

Je comprend pas bien ta fonction, car la fonction SpecialFunc de glut,
ca détecte l'appuis sur une touche, si tu reste appuyé, c'est comme si
tu auras appuyé qu'une fois, c'est vraiment ca que tu veux ?



En tout cas, voici en gros le schéma qu'il faut adopter:



void Special(int key, int x, int y)

{

switch(key)

{

case GLUT_KEY_UP :

IS_KEY_UP = TRUE;

break;

case GLUT_KEY_DOWN :

IS_KEY_DOWN = TRUE;

break;

case GLUT_KEY_LEFT :

IS_KEY_LEFT = TRUE;

break;

case GLUT_KEY_RIGHT :

IS_KEY_RIGHT = TRUE;

break;

}

}





void SpecialUp(int key, int x, int y)

{

switch(key)

{

case GLUT_KEY_UP :

IS_KEY_UP = FALSE;

break;

case GLUT_KEY_DOWN :

IS_KEY_DOWN = FALSE;

break;

case GLUT_KEY_LEFT :

IS_KEY_LEFT = FALSE;

break;

case GLUT_KEY_RIGHT :

IS_KEY_RIGHT = FALSE;

break;

}

}



Tu as donc des variables boolean qui mémorise l'état appuyé ou non
d'une touche, ainsi, la touche appuyé est prise a compte a chaque
affichage de frame, si tu restes appuyé. Après, dans ta fonction
affichage, faut définir ce qu'il faut faire si la variable IS_KEY_UP
par exemple, est appuyé. Etc...



La fonction SpecialUp détecte le relachement d'une touche, rien de particulier donc.

Et la, l'appuis sur plusieurs touches fonctionne très bien.



Dans ta fonction, tu rajoutes bien sur:

glutSpecialFunc(Special);

glutSpecialUpFunc(SpecialUp);



Aller a +
0
cs_gravel Messages postés 8 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 14 avril 2005
27 févr. 2005 à 02:28
ok ma aller essayer cela et ma reviennir te dire si ca marche ca
devrais si ca permet de pouvoir avoir avoir plusieur touche en meme
temps
0
cs_gravel Messages postés 8 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 14 avril 2005
2 mars 2005 à 05:47
merci ca marche (:
0
Rejoignez-nous