Problème de gestion de clavier avec SDL

Résolu
Signaler
Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
8 décembre 2006
-
Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
8 décembre 2006
-
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

Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
8 décembre 2006

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);
Messages postés
146
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
8 mars 2008
2
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.



@++