Problème de gestion de clavier avec SDL

Résolu
vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006 - 19 févr. 2006 à 01:16
vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006 - 19 févr. 2006 à 17:11
Bonjour, j'utilise SDL pour gérer le clavier : les flèches directionnelles doivent déplacer un personnage à l'écran. Mon problème est qu'il faut relacher et appuyer sur une touche à chaque fois que l'on désire faire avancer le personnage. Alors que je voudrais qu'il continue à se déplacer lorsque la touche est maintenue enfoncée... Voilà la boucle qui gère le clavier :

while (arret==false)
{
SDL_WaitEvent(&event);
touche = SDL_GetKeyState(NULL);

if ( touche[SDLK_ESCAPE] ) arret=true;
if ( touche[SDLK_UP] ) hero.Avancer();
if ( touche[SDLK_DOWN] ) hero.Reculer();
if ( touche[SDLK_LEFT] ) hero.TournerGauche();
if ( touche[SDLK_RIGHT] ) hero.TournerDroite();

hero.Afficher();
}

Voilà, j'epère que quelqu'un saura me répondre. Merci
Vincent

2 réponses

vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006
19 févr. 2006 à 17:11
j'ai trouvé, en fait le problème vient de SDL_WaitEvent(&event) qui bloque la boucle jusqu'à ce qu'un nouvel événement ait lieu, donc si l'on maintient la touche enfoncée, cela ne compte que pour un seul événement. Il faut remplacer cette ligne par SDL_PollEvent(&event);
3
MrdJack Messages postés 146 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 8 mars 2008 2
19 févr. 2006 à 02:41
utilises plutot une variable d'etat de la touche :

BOOL touche_haut;



tu la passes a true lors d'un key_down, et tu la repasses à false lors d'un key_up

en gros, tant que tu appuies sur la touche, la variable est a true...



il suffit ensuite de faire une condition un peu plus loin dans le prog
vérifiant si la touche est enfoncée et si oui, executer l'action.



c'est pas dur, juste penser a utiliser les etats key_down et key_up des evenements clavier.



@++
0