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...
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.
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);
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.
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.
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!
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.
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 ?
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 (./&!:?)
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
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.
If you'd like to join us, read "How do we work at OpenClassrooms"! :)