Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu] caractères non reçus par TextEntered, et gestion clavier QWERTY  (Lu 3997 fois)

0 Membres et 3 Invités sur ce sujet

Dragonic

  • Newbie
  • *
  • Messages: 46
    • Voir le profil
EDIT: oups petite erreur de ma part, ce sujet devrait plus aller dans Système je suppose !?

Bonjour,

J'ai deux petites incompréhensions avec la SFML2.0. Loin d'être bloquants, ces deux problèmes impactent un peu quand même le gameplay de mon jeu ^^ !

Le premier souci vient de TextEntered (pour un module de tchat) qui ne me récupère pas certains caractères comme 'é', 'è', ... Bref tout ce qui semble avoir un accent (les combinaisons pour les majuscules ou autres sont bien récupérées).

Sans chercher à faire un code minimal (me demander si vraiment c'est jugé nécessaire), voici comment j'utilise l'event dans mon code :

if (event.type == sf::Event::TextEntered && event.text.unicode < 128)
                {
                        if(event.text.unicode == 8)
                        {
                                if(getText().size()>0)
                                        setText(getText().substr(0, getText().size()-1));
                        }
                        else if(event.text.unicode != 9 && event.text.unicode != 13 && (GLint)getText().size()-1<m_nbrCharMax)
                                setText(getText()+static_cast<char>(event.text.unicode));
                }

Bref, j'applique à une chaîne le backSpace, et sinon rajoute le caractère tant c'est ni Entrée, ni Tab qui est tapé. Mais donc je ne parviens à saisir d'où viens le souci pour ne pas reconnaitre les lettres avec accents.


Et j'en profite pour remonter un autre problème. Un ami a qui j'ai fait tester mon programme avait un souci sur la reconnaissance de son clavier QWERTY (PC Win7). Par souci je veux simplement dire que tout était récupéré comme si c'était un clavier AZERTY. En tout cas, je ne peux que supposer que c'est à la SFML de détecter le type de clavier pour récupérer les bons event.

Quoi qu'il en soit, ces deux soucis semble concerner un unique problème : la reconnaissance du clavier utilisé, des touches présentes.

Je peux difficillement ajouter plus d'information. Je travaille et j'ai ce souci de TextEntered en tout cas avec mon laptop sous Windows7 x64.
« Modifié: Août 26, 2013, 06:25:31 pm par Dragonic »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Premier problème : tu ne gardes que les caractères < 128, c'est-à-dire les caractères ASCII (donc pas d'accents).

Second problème : il est très peu probable que ça vienne de SFML. Il a essayé plusieurs fois ? Y compris après un redémarrage ?
Laurent Gomila - SFML developer

Dragonic

  • Newbie
  • *
  • Messages: 46
    • Voir le profil
Premier problème : tu ne gardes que les caractères < 128, c'est-à-dire les caractères ASCII (donc pas d'accents).

Merci pour la précision, je n'avais pas assez fait attention à ce détail. En effet j'avais utilisé ton tuto sur les événements : http://www.sfml-dev.org/tutorials/2.0/window-events-fr.php
Celui-ci montrait un exemple de code sur "event.text.unicode < 128", et pas bien loin plus haut tu disais :
"Par exemple, appuyer sur '^' puis 'e' sur un clavier français produira deux évènements KeyPressed, mais un seul évènement TextEntered contenant le caractère 'ê'."
Résultat j'avais supposé, un peu trop vite, que les caractères accentués étaient déjà pris en compte avec ce code d'exemple ^^ !

Second problème : il est très peu probable que ça vienne de SFML. Il a essayé plusieurs fois ? Y compris après un redémarrage ?

Ok en fait j'ai redemandé et c'est moi qui a mal interprété ce que mon ami me disait je pense ^^ ! Il me disait que son clavier QWERTY se comportait comme un AZERTY, mais en fait c'est seulement que les touches de déplacement ZQSD dans le jeu ne sont evidement plus valides avec son clavier ^^ !

A ce propos, si je peux me permettre une nouvelle question, y a t-il un moyen de détecter le type de clavier utilisé, que je puisse paramétrer les touches par défaut du jeu pour des claviers AZERTY ou QWERTY ?

Merci en tout cas déjà pour cette réponse rapide ^^ !
« Modifié: Août 24, 2013, 12:37:04 am par Dragonic »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Citer
A ce propos, si je peux me permettre une nouvelle question, y a t-il un moyen de détecter le type de clavier utilisé, que je puisse paramétrer les touches par défaut du jeu pour des claviers AZERTY ou QWERTY ?
Nop, pas avec SFML.
Laurent Gomila - SFML developer

Dragonic

  • Newbie
  • *
  • Messages: 46
    • Voir le profil
Ok, je vais pas me compliquer la vie non plus. Après quelques recherches, je remarque que c'est loin d'être évident ^^ !

Dragonic

  • Newbie
  • *
  • Messages: 46
    • Voir le profil
Re : caractères non reçus par TextEntered, et gestion clavier QWERTY
« Réponse #5 le: Août 26, 2013, 05:09:05 pm »
J'aurais besoin de toi finalement Laurent pour comprendre un dernier point sur le TextEntered et mes caractères accentués.

Me basant sur la table ascii étendue, je pensais déjà donc géré l'event jusqu'à "event.text.unicode < 169" !

En me basant donc sur ça :


Mais voilà, les caractères accentués ne retournent pas du tout ces valeurs, le 'è' retourne 232, le 'é' retourne 233, le 'ê" 234, le 'ô' 244.

Ce n'est donc même pas un décalage avec la table ascii étendue !

Je peux sans souci gérer les caractères dont j'ai besoin de façon "manuelle", mais j'amerais savoir comment ça fonctionne pour ces caractères étendus. Et si je peux donc filtrer les caractères que je veux par un simple encadrement de "event.text.unicode" ou si je dois les traiter un par un !?
« Modifié: Août 26, 2013, 05:11:42 pm par Dragonic »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : caractères non reçus par TextEntered, et gestion clavier QWERTY
« Réponse #6 le: Août 26, 2013, 05:58:47 pm »
Attention, il n'existe pas un seul jeu de caractères ASCII étendus, mais de nombreux différents.

La table que tu dois regarder est celle qui correspond à ce que te renvoie SFML, à savoir de l'UTF-32 (qui correspond aussi à la valeur du caractère dans le standard Unicode) :
http://fr.wikipedia.org/wiki/Table_des_caract%C3%A8res_Unicode_(0000-0FFF)#Suppl.C3.A9ment_Latin-1
Laurent Gomila - SFML developer

Dragonic

  • Newbie
  • *
  • Messages: 46
    • Voir le profil
Re : caractères non reçus par TextEntered, et gestion clavier QWERTY
« Réponse #7 le: Août 26, 2013, 06:25:14 pm »
Ok, merci ! je ne savais pas ^^ !