[SDL] input du clavier

Signaler
Messages postés
20
Date d'inscription
dimanche 26 mars 2017
Statut
Membre
Dernière intervention
7 janvier 2020
-
[Dal]
Messages postés
5375
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 janvier 2020
-
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

Messages postés
5375
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 janvier 2020
849
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
Messages postés
20
Date d'inscription
dimanche 26 mars 2017
Statut
Membre
Dernière intervention
7 janvier 2020
1
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 ?
Messages postés
20
Date d'inscription
dimanche 26 mars 2017
Statut
Membre
Dernière intervention
7 janvier 2020
1
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
[Dal]
Messages postés
5375
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 janvier 2020
849
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).