Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] Problème avec le keypad

Sujet résolu
Anonyme
    24 août 2007 à 11:55:44

    Bonjour à tous.

    Alors je suis entrain de coder un solveur de sudoku, en fait il est déjà fait, mais je l'optimise. Alors pour rentrer les chiffres, on peut le faire avec le keypad ou avec les chiffres sur le haut du clavier. Si on prends ceux du haut du clavier, sa fonctionne, mais pas avec ceux du keypad.

    Voici le bout du code qui cause problème :
    1. case SDL_KEYDOWN:
    2.         if((event.key.keysym.sym >= SDLK_KP1 && event.key.keysym.sym <= SDLK_KP9) ||
    3.            (event.key.keysym.sym >= SDLK_1 && event.key.keysym.sym <= SDLK_9))
    4.         {
    5.                 string num;
    6.                 SDL_FreeSurface(chiffre);
    7.                 num = event.key.keysym.sym;
    8.                 istringstream iss(num);
    9.                 iss >> chiffreEntre;
    10.                 chiffre = TTF_RenderText_Blended(police, num.c_str(), couleurChiffre);
    11.                 dansTab(posCaseGrille, chiffreEntre, grille);
    12.                 entrer = true;
    13.         }


    Voilà, si quelqu'un a une idée, ...
    • Partager sur Facebook
    • Partager sur Twitter
      24 août 2007 à 12:16:51

      Bizarre.

      Ce que je te propose de faire, pour voir quel est le code de la touche que tu recherches, c'est de passer par le debuggueur, mettre un breakpoint juste quand tu rentres dans le case SDL_KEYDOWN :
      ainsi, le programme s'arretera des que tu appuieras sur une touche, et tu pourras alors consulter ta structure event de façon a voir quelle est la valeur de keysym.sym qui a été validée par SDL.

      Ensuite, passe cette valeur en Hexa, et une recherche dans le fichier SDL_keysym.h (de mémoire, je ne sais pas si c'est le nom exacte), qui contient tous les #define de SDLK, te permettra de retrouver la constante associée.
      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

      Anonyme
        24 août 2007 à 12:41:21

        C'est vrai, j'avait complètement oublier le debugger !

        j'ai mis 2 BP : 1 sur la ligne du SDL_KEYDOWN et l'autre sur la ligne du istringstream.

        Le premier m'indique ce qu'il attend (les valeurs de SDLK_KP1 ... SDLK_KP9). D'après le fichier SDL_keysym.h, c'est correct.

        Le deuxième m'indique de qu'il à enregistré : si j'appuis la touche 3 du keypad, il enregistre 3 et pas 259. pareil pour les autres touche (appui sur 1, il enregistre 1)
        • Partager sur Facebook
        • Partager sur Twitter
          24 août 2007 à 14:03:43

          Question peut-être entièrement stupide, mais y a pas une histoire de Num-lock là dedans ?
          • Partager sur Facebook
          • Partager sur Twitter
          Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
          Anonyme
            24 août 2007 à 14:08:12

            j'avait déjà pensé à ça, mais non c'est pas ça !
            • Partager sur Facebook
            • Partager sur Twitter
              24 août 2007 à 14:08:31

              J'aurais essayé...
              • Partager sur Facebook
              • Partager sur Twitter
              Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                25 août 2007 à 4:22:23

                C'est à cause du clavier qwerty, les normes du keypad ne sont pas les mêmes. Va plutôt utiliser l'unicode des caractères: event.key.keysym.unicode

                Citation : developpez


                /* On active l'unicode */
                SDL_EnableUNICODE(1);

                /* Dans notre code qui questionne la file d'événements lors d'un événement SDL_KEYDOWN ou SDL_KEYUP... */
                if (Event.key.keysym.sym == SDLK_a)
                printf("Code UNICODE de 'a' : %i", Event.key.keysym.unicode);



                Personnellement j'ai rencontré d'autres problème au niveau de la gestion des clicks de la souris. SLD_WHEELUP correspondait à un right click entre autres....
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  25 août 2007 à 12:26:48

                  Un grand MERCI à toi !! j'y aurai pas pensé !

                  j'ai juste un warning maintenant :

                  Citation : compilateur


                  warning C4244: 'argument' : conversion de 'Uint16' en 'char', perte possible de données


                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 août 2007 à 16:33:34

                    L'unicode tient sur 16bit, c'est normal pour contenir tous les caractère possibles (contient aussi les alphabets hors latin).
                    Normalement il est possible de faire des char d'une taille suffisante pour les contenir, les w_char ou c_char (un truc du genre, j'ai lu une fois puis jamais utilisé ^^') Je suppose donc que string à aussi cette possibilitée de s'étendre.




                    PS: je commence à peine à utiliser le C++, jusque là les string ne m'ont fait que des merdes, j'essaye d'utiliser mais je trouve ça assez pitoyable dès qu'on veut faire une utlisation avancée de son texte...
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      25 août 2007 à 16:38:30

                      moi j'aime bien les string :p . J'ai toujours réussit à faire ce que je voulais avec sans difficultés !

                      Mais pour l'instant, le warning ne me gène pas, d'autant plus que c'est seulement de compilateur de visual qui me le donne. Avec mingw, il y a rien.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 août 2007 à 16:45:27

                        Tu peux toujours essayer en le castant en char au moment où tu le récupères ^^
                        • Partager sur Facebook
                        • Partager sur Twitter

                        [SDL] Problème avec le keypad

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown