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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
bool Up, Left, Right, Down;
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
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 biensûr en restant APPUYE !

Et en relâchant ils sont initialisés à false.

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;
 
 
          }   
 
       }
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
vX et vY sont des distances qui correspondent à des "int"

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;}
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)

Et voilà j'ai reussi !