Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL keysym et ascii

Petite question...

Sujet résolu
    10 mars 2006 à 17:03:09

    Je suis en train de programmer un petit truc sous SDL? mais pour ça j'ai besoin à ce que l'utilisateur saisisse des lettres. Donc je me demandais si, par exemple...

    if (event.key.keysym.sym == SDLK_s)

    pouvait se traduire par

    if (event.key.keysym.sym == 's')
    ou
    if (event.key.keysym.sym == 115)

    ??

    Ca serait bien pratique, car je pourrais passer par une boucle for plutot que tapper tout les sdl_k...
    • Partager sur Facebook
    • Partager sur Twitter
      10 mars 2006 à 23:54:07

      La réponse est oui il me semble :)
      • Partager sur Facebook
      • Partager sur Twitter

      If you'd like to join us, read "How do we work at OpenClassrooms"! :)

        11 mars 2006 à 6:46:49

        Après une petite demi heure de recherche, voila ce que j'ai conclut :
        -En fait, chaque sdlk_.. possède une valeur unicode.
        -Comme les valeurs entrent 32 et 127 de l'unicode de de l'ASCII coincide, c'est possible, de la tranche de ces valeurs.
        -Ca à l'avantage que ça permet de ne pas faire attention si c'est un clavier azerty ou qwerty.

        Merci d'avoir répondu.
        • Partager sur Facebook
        • Partager sur Twitter
          11 mars 2006 à 9:29:12

          Je n'ai aps bien comprit, mais event.key.keysym.unicode contient le caractère en unicode. Un cast vers un char permet de tronquer et d'avoir une valeur ascii.
          Nb: Pour lire ce champ, il faut l'activer avec une fonction : SDL_???UNICODE(1);
          • Partager sur Facebook
          • Partager sur Twitter
            11 mars 2006 à 9:36:54

            Oui, il faut d'abord l'activer.

            Ensuite, il n'y a pas autant de valeurs ASCII que de valeurs unicode, donc, on est obligé de n'utiliser des valeurs que entre 32 et 127, sinon, je pense que ça risque de planter.
            • Partager sur Facebook
            • Partager sur Twitter
              11 mars 2006 à 9:51:55

              Et bien, je récupère les entrées clavier avec
              if((char)event.key.keysym.unicode != 0)
              Monstring += (char)event.key.keysym.unicode;
              Pas de problème(Tous les caractères qui ne sont pas affichage donnent un [])

              Nb: Pour le if je crois qu'il faudrais plutot mêtre if( event.key.keysym.unicode > 0 && event.key.keysym.unicode < 255) ce qui signifi : Si on a bien un caractère ascii.
              • Partager sur Facebook
              • Partager sur Twitter
                11 mars 2006 à 9:53:47

                Non, mais c'est bon, j'ai réglé le problème de toute façon.



                void Events::UpdateSaisie()
                {
                    caractere = NULL;
                    for (int unicode = 97; unicode <= 122; unicode++)
                    {
                        if (key_unicode[unicode] == 1)
                        {
                            key_unicode[unicode] = 0;
                            caractere = unicode;
                        }
                    }
                    for (int unicode = 65; unicode <= 90; unicode++)
                    {
                        if (key_unicode[unicode] == 1)
                        {
                            key_unicode[unicode] = 0;
                            caractere = unicode;
                        }

                    }
                    for (int unicode = 48; unicode <= 57; unicode++)
                    {
                        if (key_unicode[unicode] == 1)
                        {
                            key_unicode[unicode] = 0;
                            caractere = unicode;
                        }

                    }
                }

                • Partager sur Facebook
                • Partager sur Twitter
                  11 mars 2006 à 10:50:49

                  Je n'ai aps comorti ton code ne conaissent pas key_unicode, mais dore et déjà je peut te dire que 3 for c'est beaucoup trop, et que les pertes de perf ne sont pas négligeable! Un simple cas est beaucoup moin lour qu'un for ( int i = 0; i < 1; i++ ); donc je te l'aisse imaginer ce qu'il advien de tes fors!
                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 mars 2006 à 12:26:00

                    J'ai pas du tout compris le coup des casts... D'ailleur, c'est quoi un cast ? xD

                    Enfin bon, sur mon PC, aucun problème (bon, ok, il a 1 go de ram... ba les autres ont cas acheter de la ram xD (je déconne bien sur).

                    Enfin bon, comment tu fais ça toi, pour que l'utilisateur entre des données ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 mars 2006 à 13:29:25

                      J'ai un composant TextLine qui écoute les évnèmenets. A chaque evenement KEYDOWN si jamais mon champ a le focus, alors je rajoute a mon std::string la lêtre capturer(sauf pour backspace biensur).
                      Je la rajoute par :
                      (char)event.key.keysym.unicode

                      Le cast est (type)var et permet de convertir quelque chose en quelque chose d'autre. Ici ne garde que les 8 premier bits.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 mars 2006 à 13:34:33

                        Donc, ça te converti ton champ unicode en un caracetere ? Pourquoi, je vais y réfléchir... Mais il faut quand meme une limite, non ? Sinon, il risque de tomber sur des caracteres non-affichables ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          11 mars 2006 à 13:43:02

                          Oui, là ensuite c'est à toi de voir quel caractère tu veut garder ou pas. Le \n est non-afichable, mais tu peut vouloir le conserver... Et puis, celon les polices, certains ne s'afiche pas (./&!:?)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 mars 2006 à 14:57:03

                            Ba oui, mais dans ce cas là ça revient au meme que ma méthode, ou alors je refait un série de if avec uniquement les touches qui m'interressent...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              12 mars 2006 à 19:37:53

                              Non, tu défini la page du code ascii que tu acepte, avec 1 ou deux conditions. L'aventage c'est l'économie. 3 if c'est plus lèger qu'un de tes for
                              • Partager sur Facebook
                              • Partager sur Twitter

                              SDL keysym et ascii

                              × 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