Il y'a quelque mois j'avais posté,sur ce forum, un sujet parlant d'un probleme en ce qui concerne les diagonales en SDL. Je l'ai recherché mais il semble qu'on l'ait effacé !
Si par exemple, en appuyant ,sur le clavier, SDLK_DOWN et SDLK_RIGHT, mon personnage(SDL_Surface *heros que je blite dans SDL_Rect rectheros) je voulais que *heros se déplace vers le bas et la droite en même temps. Mais ce n'etait pas possible. Et de plus une personne(un VIP) m'avait dis qu'il faudrait REPROGRAMMER LE CLAVIER mais qu'elle ne savait pas comment le faire.
Eureka (J'ai trouvé!)
le principe est simple, j'ai crée 4 bool:
en appuyant sur SDLK_DOWN, j'intialise bool Down = true; de même pour SDLK_RIGHT
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2bool Up, Left, Right, Down;
et biensûr en restant APPUYE !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
33
34
35 if(event.type == SDL_KEYDOWN) { if(event.key.state == SDL_PRESSED) { switch(event.key.keysym.sym) { case SDLK_ESCAPE :*game = false; break; case SDLK_UP :Right = true; break; case SDLK_DOWN :Down = true; break; case SDLK_LEFT :Left = true; break; case SDLK_RIGHT : Right = true; break; } } }
Et en relâchant ils sont initialisés à false.
et nous nous voulons que le *heros aille en bas et a droite en même temps. et donc on aura une COMBINAISON de touche PRESSEES
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 if(event.type == SDL_KEYUP) { switch(event.key.keysym.sym) { case SDLK_UP : Up = false; break; case SDLK_DOWN : Down = false; break; case SDLK_LEFT : Left = false; break; case SDLK_RIGHT : Right = false; break; } }
vX et vY sont des distances qui correspondent à des "int"
De cette manière notre *heros(SDL_Surface *heros) se deplace comme on le souhaite, en changeant, tout simplement, ses coordonnées(SDL_Rect rectheros)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
33
34
35
36 if(Up == true && Left == false && //up Right == false && Down == false && ) {rectheros.y = rectheros.y - vY;} else if(Up == false && Left == true && //left Right == false && Down == false &&) {rectheros.x = rectheros.x - vX;} else if(Up == true && Left == true && //leftup Right == false && Down == false &&) {rectheros.y = rectheros.y - vY; rectheros.x = rectheros.x - vX;} else if(Up == false && Left == false && //right Right == true && Down == false && ) {rectheros.x = rectheros.x + vX;} else if(Up == true && Left == false && //rightup Right == true && Down == false &&) {rectheros.y = rectheros.y - vY; rectheros.x = rectheros.x + vX;} else if(Up == false && Left == true && //leftdown Right == false && Down == true &&) {rectheros.y = rectheros.y + vY; rectheros.x = rectheros.x - vX;} else if(Up == false && Left == false && //rightdown Right == true && Down == true &&) {rectheros.y = rectheros.y + vY; // <- c'est ce que nous rectheros.x = rectheros.x + vX;} // voulons else if(Up == false && Left == false && //down Right == false && Down == true && ) {rectheros.y = rectheros.y + vY;}
Et voilà j'ai reussi !
Partager