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 :

Probleme Qwerty au lieu de Azerty


Sujet :

SDL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Points : 41
    Points
    41
    Par défaut Probleme Qwerty au lieu de Azerty
    Voilà, je fais un moteur de jeu, et j'arrive bientot à la fin mais soudain je bloque:
    J'ai constater que la touche A reagissait comme la touche Q et vice et versa -> SDL gére l'application en QWERTY or mon clavier est en AZERTY

    J'ai alors longuement chercher (et encore une fois perdu mon temps), et j'en ai conclue ceci:
    Ce problème n'arrive pas a tous les clavier azerty (surtout qu'il y aurai plus de mon qui demanderai aussi)
    Il est fort deconseiller de faire ça propre map pour regler le probleme (et puis faire la map de chaque clavier...:s)
    La solution que propose SDL, est l'utilisation de l'unicode:
    SDL_EnableUNICODE(1)
    et du keysym.unicode

    Seulement ils previennent que ça ne marche que quand on appuie sur la touche, KEYDOWN
    Ok mais non! j'ai besoin d'avoir le KEYUP car admettant que je fasse un char key[400] et que j'y stock les touches activent (et eviter de devoir tapotter sur la touche pour faire avance l'objet), comment je fais pour savoir que la touche et relaché et qu'il faut désactive la touche, dont on ne connait donc pas le nom finalement...

    avouez que c'est extremement gênant et je serais VRAIMENT embeter, pour ne pas être grossier, de changer SDL par une auter lib...

    Vous avez une idée ? ça vous est dejà arrivé ? vous avez reussi à eviter le probleme ?

    merci d'avance pour vos reponse !

  2. #2
    Membre régulier Avatar de Froyok
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 83
    Points : 73
    Points
    73
    Par défaut
    Je connais ce problème avec un jeu (encore en développement) qui utilise la SDL, ce sont des américains qui le développent, donc clavier qwerty.

    Je leur ai parlé de ce problème, et ils on cherché de leur côté mais pas trouvé grand chose de probant, à par une solution qui se révèle pratique pour un jeu :
    stocker dans un fichier l'association d'une touche avec une fonction.

    En gros, laisser le choix à l'utilisateur de configurer l'application t les touches qu'il souhaite. De cette manière tu peux être sur que celui qui utilisera ton programme le fera fonctionner de la bonne manière.

    Enfin, cela fait plus solution bancale je trouve, mais ça a le mérite de fonctionner (je pense, ils ne l'ont pas encore implémenté).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    mouai, c'est bien ce que je conclue, ceci est un probleme sans veritable solution, c'est un defaut SDL
    Donc voilà c'est fait, je suis deprimé....je vais devoir recommencer mon moteur de jeu avec une autre lib, peut etre SFML (mais trop developper...)

    t'as solution est comme tu le dit bancale, pas très serieux, surtout pour un moteur de jeu...

    va falloir que je revoye tout ça...
    si quelqu'un a une autre idée, n'hesiter pas !

  4. #4
    Membre régulier Avatar de Froyok
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 83
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par Scheb Voir le message
    t'as solution est comme tu le dit bancale, pas très serieux, surtout pour un moteur de jeu...
    Tous à fait d'accord, mais même si c'est un moteur de jeu, qui dit moteur, dit jeu derrière, et aujourd'hui les jeux proposent bien de choisir les touches souhaités non ?

    Enfin bref, de la rejeter le SDL...
    Je trouve bizarre d'ailleurs que la SDL ait un tel problème sans solution, à la façon dont celle-ci est répandu...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Froyok Voir le message
    Je trouve bizarre d'ailleurs que la SDL ait un tel problème sans solution, à la façon dont celle-ci est répandu...
    En fesant mais recherche hier, j'en avait conclue que ce problème n'arrivait pas à TOUT les clavier azerty, donc si nous sommes un minorité il est normal que le problème n'est pas entendu (il y a un post d'un jeu nommé 2H4U, où il y avait un chat et certains, pas tous ,utilisateurs avaient ce probleme, ou encore dans les commentaires des tutos de mateo du site du 0)

    T'as solution "bancale", le probleme c'est que si tu fesait un petit snake, c'est quand même lourd de devoir config les touches pour un si petit jeu

    Bref, après une nuit blanche j'ai trouver une alternative sympathique; on a accés à l'unicode au KEYDOWN (qui vient avant le KEYUP fort heuresement), et bien je stock l'unicode et ça correspondance sym dans un tableaux:

    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
     
    #include "stdlib.h"
    #include "SDL/SDL.h"
    #include <iostream>
     
    using namespace std;
     
    SDLKey Clav[SDLK_LAST];//"SDLK_LAST" indique le nombre d'enum de SDLK
     
    void Traduction(SDL_KeyboardEvent *key);
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
    	SDL_Surface *screen;
    	SDL_Event event;
    	int running = 1;
     
    	if (SDL_Init(SDL_INIT_VIDEO) != 0) {
    		return 1;
    	}
    	SDL_KeyboardEvent *key;
     
            SDL_EnableUNICODE(1);
    	atexit(SDL_Quit);
     
    	screen = SDL_SetVideoMode(320, 240, 0, SDL_ANYFORMAT);
    	if (screen == NULL) {
    		return 1;
    	}
     
    	while(running) {
    		while(SDL_PollEvent(&event)) {
    			switch(event.type){
    				case SDL_KEYDOWN:
                                    Traduction(&event.key);
                                    cout <<  "pressé: " << SDL_GetKeyName(Clav[event.key.keysym.sym]) << endl;
                                    break;
    				case SDL_KEYUP:
                                    cout <<  "relaché: " << SDL_GetKeyName(Clav[event.key.keysym.sym]) << endl;
                                    if((Clav[event.key.keysym.sym]) == SDLK_q){ running = 0;} //ici on peut tester: 
    //on remarque que c'est bien quand on appuie sur "q" que cela quitte et non "a"
    					break;
    				case SDL_QUIT:
    					running = 0;
    					break;
    			}
    		}
    	}
    	return 0;
    }
     
     
    void Traduction(SDL_KeyboardEvent *key)
    {
        if(Clav[key->keysym.sym] != 0)
        {
            return;
        }
        if(((key->keysym.unicode) != 0) && (key->keysym.unicode < 256) )
        {
            Clav[key->keysym.sym] = (SDLKey)key->keysym.unicode;
        }
        else
        {
            Clav[key->keysym.sym] = key->keysym.sym;
        }
    }
    edit:
    j'ai apporter quelques correction depuis ce matin:
    07 juin 2009 14:39:03 :
    Modification de la taille du tableau Clav j'ai mis "SDLK_LAST", c'est le dernier élément de l'enumeration SDLK (on est sûr d'avoir la bonne taille^^)
    07 juin 2009 18:42:14 :
    Modification de if(((key->keysym.unicode) != 0)" && (key->keysym.unicode < 256) ") dans le fonction Traduction(): Au dessus de 255, les codages sont universelle (comme alt, ctrl) ou particulier (le pavé numérique, sans la modification, quand on appuie sur le "+" du pavé numérique, l'unicode nous retourne le "+" à coté de la touche entrée)
    On peut émettre un tas d'alternative après et tout est regler

    voila merci froyok pour tes reponses, j'avoue avoir trop précipitement fait un post mais c'était une urgence !
    Et puis de mes recherches j'ai constaté que beauoups n'avait pas encore la solution donc je considère ce post toute fois utile

    [je suis en train d'exploiter ce code, il est possible qu'il y ait des failles, au pire si j'en voit, je viendrais corrigé]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme VARBYTES au lieu de BLOP !
    Par toubal_99 dans le forum Bases de données
    Réponses: 3
    Dernier message: 12/05/2007, 13h42
  2. Deux claviers, un en QWERTY, l'autre en AZERTY
    Par barthelv dans le forum Windows XP
    Réponses: 2
    Dernier message: 19/06/2006, 14h57
  3. [Win XP]Problème clavier QWERTY - AZERTY
    Par SLE dans le forum Windows XP
    Réponses: 5
    Dernier message: 01/03/2006, 09h33
  4. [Info] Modification type clavier azerty à qwerty
    Par giordano dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 17/02/2006, 22h42
  5. Réponses: 4
    Dernier message: 23/11/2005, 11h16

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