[SDL] input du clavier

Fermé
thyma2 Messages postés 20 Date d'inscription dimanche 26 mars 2017 Statut Membre Dernière intervention 7 janvier 2020 - 5 janv. 2020 à 15:13
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 7 janv. 2020 à 14:16
Bonjour,

je travaille sur un projet qui fonctionne avec la bibliothèque SDL
j'ai fait une fonction qui récupère les entrés clavier de l'utilisateur.
malheureusement les entrés claviers ne fonctionnent pas toutes.
les caractères que je peut activer en une touche fonctionnent (par exemple a, b, c, d...)
mais pour touts les caractères qui nécessitent une combinaison de touche cela ne fonctionne pas (par exemple 1, 2, 3 ...)
car mon clavier n'a pas de touches réservé au numéro, il faut appuyer sur & et maj en même temps pour faire 1

bon je pourrais en soit détecter le caractère spéciaux et la touche maj et activer la lettre uniquement si les deux touches sont enfoncés. Mais cela est une mauvaise idée car si le clavier n'est pas dans la même langue ça ne marche plus, de plus la documentation sdl est basé sur le clavier anglais et impossible de trouver le caractère é ou è.

pour récupérer les input j'utilise les fonction keyup et keydown de la sdl

voilà vous pouvez me demander de clarifier mon problème bien sur
bonne journée

3 réponses

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
6 janv. 2020 à 18:40
Salut thyma2,

Il n'y a pas de fonctions keyup et keydown dans la sdl2.

Je pense que tu parles des types d'événements SDL_KEYUP et SDL_KEYDOWN dans une union SDL_Event obtenue avec la fonction SDL_PollEvent() et de scancode ou de keycode récupéré(s) via les champs key, puis keysym.

En tout état de cause, ce moyen est normalement utilisé pour récupérer des information sur des touches pressées (plutôt que sur des caractères saisis), typiquement pour construire une interface avec l'utilisateur permettant au programme de réagir à la pression d'une touche.

Pour récupérer du texte saisi, tu devrais t'intéresser au type d'événements SDL_TEXTINPUT, qui va récupérer le texte saisi en utf8.

https://wiki.libsdl.org/Tutorials/TextInput

Dal
0
thyma2 Messages postés 20 Date d'inscription dimanche 26 mars 2017 Statut Membre Dernière intervention 7 janvier 2020 2
7 janv. 2020 à 11:23
salut
merci de ta réponse
j'ai essayer donc d'utiliser cette fonction au lieu de celles que j'avais crée.
mais j'ai une erreur à la compilation undefined reference to function sdl TextInput
c'est étrange car j'include bien sdl et les autres fonctions sdl fonctionnent.
c'est peut être du au fait que j'utilise arch linux et non windows ?
0
thyma2 Messages postés 20 Date d'inscription dimanche 26 mars 2017 Statut Membre Dernière intervention 7 janvier 2020 2
7 janv. 2020 à 13:22
Re - salut
eh oui j'étais sur sdl1, et cette fonctionne n'existe que sous sdl2
mais comme j'en ai besoin, je migre sur sdl2 (c'est chiant faut refaire pleins de trucs)
je repasse ce soir ou demain pour dire si cette méthode marche sur sdl2
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié le 7 janv. 2020 à 14:32
Oui, c'est pour sdl2.

En sdl 1.2 tu avais SDL_EnableUNICODE() pour paramétrer la sdl en vue d'obtenir le caractère unicode associé à la touche pressée.

Tu as des exemples sur le site de Lazy Foo http://lazyfoo.net/SDL_tutorials/lesson23/index.php (c'est en C++).

Mais cela ne fonctionnait pas bien pour plusieurs raisons (vois https://wiki.libsdl.org/MigrationGuide?highlight=%28SDL_EnableUNICODE%29) et cela a été abandonné dans la sdl2 qui crée un type d'événement et des procédés différents de gestion de la saisie en utf8 et distingués de ceux de gestion des touches.

Avant de migrer tout ton code en sdl2, fais juste un court programme sdl2 de test en utilisant comme base le code du tutoriel.

Si tu es sous Linux, ta console devrait être capable d'afficher les caractères utf8 avec un simple printf(). Tu peux aussi afficher la chaîne utf8 récupérée dans une fenêtre sdl avec SDL_ttf sous la forme d'une surface avec TTF_RenderUTF8_Solid() ou la sauvegarder dans un fichier et l'ouvrir avec un éditeur supportant utf8 (ce qui ne devrait pas être un problème sous Linux).
0