Les évènements.
Pour se mettre en attente d'un évènement, il faut tout
d'abord creer un objet du type SDL_Event, qui nous permettra de
récupérer le type d'évenement survenu. On entre
ensuite en général dans une boucle infinie :
while(SDL_PollEvent(&event))
{
//
Type d'évènement
switch(event.type) {
case SDL_KEYDOWN: // Si on presse une touche
switch(event.key.keysym.sym) {
case SDLK_ESCAPE: // Actions pour ECHAP
break;
case SDLK_LEFT: // Actions pour <-
break;
case SDLK_RETURN: // Actions pour ENTREE
break;
case SDLK_w: /* touche Z */ break;
case SDLK_s: /* touche S */ break;
case SDLK_a: /* touche Q */ break;
case SDLK_d: /* touche D */ break;
default:break;
}
break;
case SDL_KEYUP: // Si on relache une touche
break;
case SDL_QUIT: // Fermeture du programme
exit(0);
}
}
Pour les évènements de la souris il faudra traiter
SDL_MOUSEBUTTONDOWN et SDL_MOUSEBUTTONUP pour les boutons, dans ce cas
le numéro du bouton pourra être
récupéré dans la variable event.button.button, et
SDL_MOUSEMOTION pour un déplacement, dans ce cas la position
pourra être récupérée dans les variables
event.motion.x, event.motion.y, event.motion.xrel et event.motion.yrel.
Une autre solution pour minimiser la consommation CPU est d'attendre un
évènement, en effet nous interrongons en permanence la
file d'évènements avec la fonction
SDL_PollEvent(),
alors que l'on pourrait se mettre simplement en attente avec la
fonction
SDL_WaitEvent().
Une autre méthode plus rapide pour le traitement du clavier
consiste a récupérer l'etat
global dans lequel se trouve le clavier, pour cela on utilise la
fonction SDL_GetKeyState(), exemple :
Uint8 * keys;
while(1) {
while(SDL_PollEvent(&event))
{
//
Type d'évènement
...
}
// On récupère en une commande l'etat du clavier.
keys =
SDL_GetKeyState(NULL);
if(keys[SDLK_UP]) //touche haut pressée;
...
}
Enfin, plutôt que de scruter en
permanence les évènements qui peuvent arriver, ce qui
fait obligatoirement augmenter l'utilisation CPU, le programme peut se
mettre en attente d'évenement grâce à la fonction SDL_SetEventFilter(<nom
de fonction>), la fonction passée en argument sera de
la forme mafonction(const
SDL_Event * event).