4.1 Le clavier

Il y a deux grands types d’événements pour le clavier :

  • l'enfoncement d'une touche (SDL_KEYDOWN)
  • le relâchement d'une touche (SDL_KEYUP)

Ces deux constantes sont des types de SDL_Event, si vous avez un SDL_Event even vous pouvez récupérer le type d’événement en faisant :

1
2
SDL_Event event;
event.type;

Pour récupérer une touche en particulier il faut utiliser une sous-sous-sous-variable : event.key.keysym.sym bon d'accord il y a plus court comme variable mais la ce n'est pas ma faute.

Avec cela il y a l'indispensable tableau avec les touches et les variables de SDL pour tester les appuis et les relâchements de touches.

Tableau Touches Variables (de la doc de SDL)

Maintenant que l'on a plein de nouvelles variables on va pouvoir jouer. Nous pouvons modifier la fonction attente (ou pause, suivant ce que vous prenez comme main.cpp) pour quitter si on appuie sur la touche échappe (Escape en anglais).

1
2
3
4
5
6
void attente(){
	SDL_Event event;
	while (event.type != SDL_QUIT && event.key.keysym.sym != SDLK_ESCAPE){
		SDL_WaitEvent(&event);
	}
}

Bien sur si vous faite un jeu vous n'écrirez pas cette fonction comme ça mais plutôt comme ceci :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void attente(){
	SDL_Event event; //on créé un événement
	bool wait = true; //on créé un booléen pour attendre
	while(wait){
		//on attend
		SDL_WaitEvent(&event); //mise à jour des événements
		switch(event.type){
			//on regarde différents types
			case SDL_QUIT :        //si on clique dans la croix
				wait = false; //on s'arrête
				break;
			case SDL_KEYDOWN :
				//si on a pressé une touche
				switch(event.key.keysym.sym){ //switch touches
					case SDLK_ESCAPE : //si echap
					wait = false;    //on quitte
					break;
				case SDLK_UP :   //si flèche du haut
					//on bouge un joueur
					break;
				case SDLK_SPACE : //si espace
					//on fait tirer le joueur
					break ;
				default:
					break;
				}
				break;
			default: //cas par défaut évite d'avoir des warnings
				break; //pour rien
		}
	}
}

Bien sur au bout de plusieurs touches ça devient vite long. Et les touches à utiliser sont écrites en dure dans le programme. Et catastrophe on ne peut gérer qu'une touche à la fois (nous verrons un moyen de faire autrement).

Question clavier, l'essentiel est vu.