IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Input clavier et UNICODE ?


Sujet :

SDL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut Input clavier et UNICODE ?
    Bonjour, bonjour .

    Je viens à mes dépens de me rendre compte qu'il allait me falloir passer par les unicodes avec la SDL sinon azerty et/ou qwerty allaient raler

    Bref, je comprend pourquoi, mais j'ai un peu de mal à voir comment :

    Je récupère mes valeurs unicodes pour toutes les touches appuyées, je ne prend que celle entres 32 et 127 qui se "map" directement avec a table ascii si mes souvenirs sont bon et le tour est joué.

    Le problème est que je viens de voir que l'unicode n'est pas présent sur l'event SDL_KEYUP, je supose que c'est à cause des combinaisons de touches ayant un sens en unicode et pas en ascii mais ca ne me dit pas quelles touche va réelement être relaché !

    SDLK_a = 97

    Si jappuie sur "a" :

    sym = 113 ( équivalent de SDLK_q, d'ou la necessité de passé en unicode)
    unicode = 97 ( ok )

    Si je relache "a"

    sym = 113 ( dans mes events ca va correspondra a SDLK_q .... problème!)
    unicode = pas dispo

    Je fais comment pour obtenir réllement mes touches relachées alors ?

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Clad3
    Si jappuie sur "a" :

    sym = 113 ( équivalent de SDLK_q, d'ou la necessité de passé en unicode)
    unicode = 97 ( ok )

    Si je relache "a"

    sym = 113 ( dans mes events ca va correspondra a SDLK_q .... problème!)
    unicode = pas dispo

    Je fais comment pour obtenir réllement mes touches relachées alors ?
    Bonjour,

    Pourquoi ne pas simplement mettre au démarrage du programme une table de correspondance en place.

    Tu aurais donc :

    tab_ascii_to_uni[113] <- 97

    Et le tour est joué pour le SDL_KEYUP...

    Jc

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    Bonjour, rebonjour

    Ca fait une table d'indirection en gros à faire soit-même.
    C'est un peu fastidieux de faire toute les conversion soit même, et surtout ca ne prend pas en compte le clavier de l'utilisateur ( qwerty et azerty ), donc on perd toute l'utilité ou presque de l'unicode .

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    Mon cerveau s'est allumé, il m'a parlé, mais comme je suis le seul à l'avoir écouté je ne sais pas si je peux le croire, vous en pensez quoi ?

    Idée : *petite ampoule qui s'allume*

    -Je dipose du code sym et de l'unicode au besoin, je vais donc utiliser les deux.

    -Dans les fichiers configs (par exemple le chargement des raccourci clavier définit par l'utilisateur), je stockerai la valeur sym de la touche, ces fichiers ne seront aps fait pour être modifier à la main.

    -Quand dans le jeu, je capte une touche appuyé, je compare le tout avec la version sym encore.

    -Seulement lors de l'affichage, (ex: à l'écran ou l'utilisateur peut changer ses raccourci claviers), j'affiche l'unicde tout en gardant comme identifiant de ma touche pour le reste de mon code, la valeur sym.

    Exemple :
    -Mon clavier est azerty, la valeur de SDLK_a est de 97 et celle de SDLK_q de 93 .
    - Si j'appuie sur "a", le sym est de 113 (la SDL soit être mappé pour du qwerty donc) et correspond à "q".
    -> Si je change dans mon menu le raccourci "Attaquer" et que dans la case me proposant de choisir mon raccourci, je tape sur ma touche "a" : à l'écran j'affiche l'unicode, donc j'aurais bien 97 et "a" d'afficher, mais dans mon programme, je note "attaquer = 113" (valeur sym). Je note cette valeur sym dans mon fichiers config
    - Quand je fait des test lors de la reception de la touche "a" (113 en sym), je compare bien avec le 113 da ma touche attaquer.

    Ca vous parait se tenir tout ca ? (Moi oui, mais il est tard et comme je m'enbrouille TRES vite entre les valeurs sym /unicode, j'ai besoin de votre aval ... ou de vos critqiues ! )

    Petits points : Je me demande en faits quelle valeur (sym/unicode) stoqué dans mon fichier config. Je penche finalement plus pour l'unicode, reste à voir comment je converti l'unicode en sym ... là, je vois pas .
    Edit: Pour les qwerty sur les touches : sym=ascii et pour les azerty, je test la valeur sym, docn je garde bien le sym dans mes fichiers config, non?

  5. #5
    Membre éclairé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Par défaut
    Euh, pourquoi tu t'embêtes autant ?

    Dans le choix des touches, l'utilisateur choisi pour l'attaque SDLK_q (c'est ce que tu recois quand il appuye, tu te fiches de savoir s'il a appuyer sur a ou q). Tu stockes donc dans ton tableau de correspondance des touches Attaquer <- SDLK_q.
    Dans le jeu, il appuye sur SDLK_a ou SDLK_q, à ce moment là, ton tableau de correspondance des touches contient bien SDLK_q mais pas SDLK_a, donc SDLK_q provoque une attaque, et SLDK_a rien.

    C'est pas plus simple ?

  6. #6
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Bon, je n'ai jamais fait de gestion de l'unicode, mais je vais devoir m'y penché. Es-tu sûr que ton code qu'il y a vraiment un problème ?

    J'ai testé ce code sous mon linux et avec un mapping azerty ou qwerty il fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    #include <SDL.h>
    #include <iostream>
     
     
    const int WIDTH=640;
    const int HEIGHT=480;
     
    int main(int argc, char **argv)
    {
        //Déclaration des variables
        SDL_Event event;
        SDL_Surface *screen;
        int done = 0;
     
        //Initialisation de SDL
        if(SDL_Init(SDL_INIT_VIDEO)!=0)
        {
            std::cerr << "Probleme pour initialiser SDL" << SDL_GetError() << std::endl;
            return 1;
        }
     
        //Mettre un titre à la fenêtre
        SDL_WM_SetCaption("Programme SDL de base", NULL);
        //Ouvrerture d'une surface pour l'affichage de la fenêtre
        screen = SDL_SetVideoMode(WIDTH,HEIGHT, 32,
                                  SDL_DOUBLEBUF | SDL_HWSURFACE);
        if(screen==NULL)
            done = 1;
     
        /* On active l'unicode */
        SDL_EnableUNICODE(1);
     
     
        //Boucle generale
        while(!done)
        {
            //Traiter les évènements
            while(SDL_PollEvent(&event))
            {
                switch(event.type)
                {
                    //Si on veut quitter, done=1 suffira
                    case SDL_QUIT:
                    done=1;
                    break;
    		case SDL_KEYDOWN:
    		     if((event.key.keysym.unicode >= 'a') && (event.key.keysym.unicode <= 'z'))
    		     	printf("Code DOWN UNICODE de '%c' : %d\n", event.key.keysym.unicode,event.key.keysym.unicode);
    		     event.key.keysym.unicode = 0;
    		break;
                    //Si on vient de relacher une touche de clavier
                    case SDL_KEYUP:
     	     	    if((event.key.keysym.unicode >= 'a') && (event.key.keysym.unicode <= 'z'))
        		    	printf("Code UP UNICODE de '%c' : %d\n", event.key.keysym.unicode, event.key.keysym.unicode);
                    //Et si c'est la lettre q
    		if(event.key.keysym.unicode==SDLK_q)
                        //On met done a 1 pour quitter
                        done=1;
     
        	        event.key.keysym.unicode = 0;		    
                    break;
                    //Sinon on ne fait rien
                    default:
                    break;
                }
            }
        }
     
        SDL_Quit();
        return 0;
    }
    Il teste les événements SDL_KEYUP et SDL_KEYDOWN, les deux remplissent correctement le champ unicode.

    Jc

Discussions similaires

  1. linux, input clavier/souris
    Par kripteks dans le forum C++
    Réponses: 6
    Dernier message: 03/03/2013, 12h04
  2. Réponses: 8
    Dernier message: 15/08/2011, 21h20
  3. Réponses: 2
    Dernier message: 04/08/2010, 22h20
  4. Changer le clavier pour entrée de caractères unicode.
    Par yupyupxav dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 10/09/2008, 08h47
  5. [JPanel] input clavier
    Par dedesite dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 25/10/2006, 23h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo