CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

SDL et le Clavier

hs_dino
hs_dino
Niveau 9
12 avril 2004 à 15:29:16

J´aimerais obtenir le caractere ASCII localisé correspondant a l´etat du clavier.

Plus clairement, si j´appuie sur MAJ et sur la touche A sur un clavier francais, j´aimerais obtenir 0x40, soit un A majuscule.

Sous Windows, ca se fait avec ToAsciiEx et MapVirtualKeyEx, mais sous linux je n´arrive pas à trouver d´équivalent.

Alors actuellement avec la SDL, je fais un SDL_GetKeyState() qui me renvoie l´etat localisé de toutes les touches du clavier, mais ca ne m´interesse pas car je n´ai pas le caractere ASCII qui correspond.

Voilà, si vous avez des solutions ca serait cool :)

Ruffi
Ruffi
Niveau 9
12 avril 2004 à 15:35:09

Je sais pas si ça peu t´aider : http://www.megastep.org/SDL/progsdl3.html

" La fonction SDL_EnableUNICODE(int enable) permet d´activer/désactiver la gestion du mode Unicode ( utile surtout pour les claviers non QWERTY)."

" Parmi les fonctions utilitaires liées au clavier, on trouve SDL_GetKeyName(SDLKey key) qui renvoie une chaîne de caractères décrivant " en clair" la touche passée en argument."

hs_dino
hs_dino
Niveau 9
12 avril 2004 à 15:41:51

Pour SDL_GetKeyName(), ce n´est pas se que j´attends, cette fonction renvoie le nom de la touche passé en argument.

Pour l´unicode, c´est bien çà que je veux recuperer, le caractere unicode, qui est dispo dans la structure suivante :

typedef struct{
Uint8 scancode;
SDLKey sym;
SDLMod mod;
Uint16 unicode;
} SDL_keysym;

Mais me probleme c´est que cette structure ne semble pas etre accessible en asynchrone, mais uniquement en récuperer les evenements.

i_am_the_law
i_am_the_law
Niveau 6
12 avril 2004 à 19:48:34

je ne sais aps s´il existe de fonction toute faite, mais au pire tu peux le faire manuellement.

Dans le tableau qui t´es renvoye par SDL_GetKeyState, l´index correspond au code ascii de la touche.

Je ne sais pas si ds ce tableau les maj sont gerees. A toi d´essayer. Par ex si tu appuies sur shift+a je ne sais pas si l´index 0x41 ( et p sera a 1. Si c´est le cas, c´est facile d´obtenir le code ascii.

Si les maj ne sont pas gerees :
Tu regarde si la touche shift est pressee.
Ensuite tu parcours le tableau pour voir si une touche est pressee. Si la touche est pressee tu renvoies l´index en enelvant 32 si shift etait pressee.

i_am_the_law
i_am_the_law
Niveau 6
12 avril 2004 à 19:49:31

j´avais pas fini de me relire qd ca a ete envoye, je voulais dire que ´A´ c´etait 0x41 et non 40. :)

hs_dino
hs_dino
Niveau 9
12 avril 2004 à 20:22:49

Oui, mais cette astuce ne marche QUE pour les 26 lettres de l´alphabet.

Ensuite ca ne marche plus.

Ex:
Clavier AZERTY: MAJ+& => 1
Clavier QWERTY: MAJ+& => &

En gros, il faudrait remapper chaque touche pour chaque clavier : la galere !

i_am_the_law
i_am_the_law
Niveau 6
12 avril 2004 à 21:21:36

les chiffres et certains caracteres speciaux sont definis. Donc avec de la chance t´as besoin que de ceux la et la methode reste valable.
Si tu as besoin de plus d´exotisme, faut trouver autre chose c´est sur :)

Je suppose que tu as besoin de ca, juste pour saisir les entrees de texte et non pour le controle d´un joueur.
Si t´es capable de detecter le debut et la fin d´une saisie, tu peux t´en sortir en lisant les touches via la lecture d´evenements ( si ds ce mode tu peux recuperer la structure qui t´interessait).
En general on tape sur entree par ex, ou la touche ² pour ouvrir une console.
Au pire si les evenements te plaisent pas t´as tjrs la solution d´utiliser les methodes d´entrees standards ( sans sdl).

Mais bon, c´est p-e pas trop faisable ds ton cas et je ne vois pas trop d´autres methodes.

JeanYvesYves
JeanYvesYves
Niveau 10
12 avril 2004 à 22:18:23

Les codes de SDL sont différents des codes ASCII, notemment parce qu´il différencie par exemple la touche " 2" de droite et le shift+2alpha, qui donnent le meme code ASCII, mais pas la meme chose : c´est du scancode.

Va voir le fichier : SDL_keysim.h : il y a dedans tous les #define qui associent le code a une constante symbolique, pour que tu voies ce que c´est...

Je te conseille d´y reprogrammer : mais le code sera surtout un gros tableau statique a remplir... Bon courage...

i_am_the_law
i_am_the_law
Niveau 6
12 avril 2004 à 22:50:50

Justement non, les index ds le tableau correspondent au vrai code ascii de la touche

qd tu fais keys[sdlk_a] ca equivaut a keys[´a´]

regarde le fichier que tu as cite :)
SDLK_a = 97

Ou alors tu ne parlais pas de la meme chose...

hs_dino
hs_dino
Niveau 9
12 avril 2004 à 23:00:52

Bon, comme il est hors de question que je m´amuser a refaire de la localisation avecdes tables de correspondance, j´ai décidé de tout refaire mon système en évenementiel.
Je viens de finir a la seconde ce système pour Windows, demain j´attaque la version SDL pour linux.

Au grands maux les grands remedes :)

Remarque c´est pas plus mal comme çà et ca m´a permis de cleaner un peu mon code par la meme occasion :)

Sinon c´est vrai que les index des tableaux de touche correspondant a ceux de la table ASCII affichable, c´est pareil sous Windows avec les Virtual Key code, mais ca ne gere pas la casse.

JeanYvesYves
JeanYvesYves
Niveau 10
12 avril 2004 à 23:02:27

Ah vi, en effet, les codes sont pas si différents que ça :) y´a meme les chiffres dans les 40 :)

Faut juste faire des tests de SHIFT+ une lettre
qui passe a 65. A moins que ça marche tout seul, mais bon ! je ne sais pas !
Si ce n´est pas le cas, y´a plus que qq tests a faire :)

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment