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 :

Gestion clavier


Sujet :

SDL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Gestion clavier
    Bonjour,

    comment puis-je simplement (une ligne, si possible) faire le test suivant :
    maj (gauche ou droite) est enfoncée OU verr maj est enfoncée, mais pas les deux.

    Merci

  2. #2
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Points : 15
    Points
    15
    Par défaut
    Une simple lecture de la doc SDL te donneras la réponse.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Non, j'ai lu la doc et je n'ai pas trouvé la réponse.
    Je sais qu'il faut utiliser SDLK_CAPSLOCK et SDLK_SHIFT, mais je ne sais pas comment.
    Merci de m'aider.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Comme le dit Giann008 ... RTFM.

    Mais bon, bref
    En partant du principe que vous savez récupéré les touches ... de la manière la plus bateau, il faut faire
    ( La variable s'appelle keys dans mon exemple )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( ( keys.keysym.key == SDLK_SHIFT && keys.keysym.key != SDLK_CAPSLOCK ) || ( keys.keysym.key == SDLK_CAPSLOCK && keys.keysym.key != SDLK_SHIFT) )
    Voilà en une ligne.

    Sinon, je suis assez étonné mais ce test est un XOR ( ou exclusif ) mais je ne sais plus le faire en C

    Sinon quelque fois, lorsque l'on ne comprend pas la doc, on cherche un peu sur internet ( et des fois, pas très très loin ) : http://loka.developpez.com/tutoriel/sdl/
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (keys.keysym.key == SDLK_SHIFT ^ keys.keysym.key == SDLK_CAPSLOCK)
    Le XOR, c'est ^



    code non tester, mais ca devrait fonctionner.

  6. #6
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    Y a pas un problème dans vos tests ?
    Si keys.keysym.key == SDLK_SHIFT elle est égale à seulement SDLK_SHIFT et rien d'autre, ça doit plutôt être un tableau de touches pressées.
    Vive les roues en pierre

  7. #7
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Il veut pas savoir si les deux touche sont presser en meme temps (dans ce cas ci, nous serions daccord -> SDL_GetKeyState), mais il veut savoir si une touche OU (exclusif) une autre touche a été presser.

    Donc, les condition sont valide.

    Apres, s'il veut tester deux touche -> SDL_GetKeyState.

  8. #8
    Membre averti
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Octobre 2008
    Messages : 187
    Points : 448
    Points
    448
    Par défaut
    Citation Envoyé par Djakisback Voir le message
    Y a pas un problème dans vos tests ?
    Si keys.keysym.key == SDLK_SHIFT elle est égale à seulement SDLK_SHIFT et rien d'autre, ça doit plutôt être un tableau de touches pressées.
    Tout à fait, la réponse donnée par LittleWhite ne marchera pas. Une recherche rapide dans la doc de donne la fonction SDL_GetKeyState :

    http://www.libsdl.org/cgi/docwiki.cgi/SDL_GetKeyState

    L'exemple donné résout quasiment ton problème.

  9. #9
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    Citation Envoyé par SofEvans Voir le message
    Il veut pas savoir si les deux touche sont presser en meme temps (dans ce cas ci, nous serions daccord -> SDL_GetKeyState), mais il veut savoir si une touche OU (exclusif) une autre touche a été presser.

    Donc, les condition sont valide.

    Apres, s'il veut tester deux touche -> SDL_GetKeyState.
    Hum, c'est bien ce que je dis :
    si :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    keys.keysym.key == SDLK_SHIFT
    alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    keys.keysym.key != SDLK_CAPSLOCK
    donc le test est inutile et équivaut à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(keys.keysym.key == SDLK_SHIFT || keys.keysym.key == SDLK_CAPSLOCK)
    Vive les roues en pierre

  10. #10
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Effectivement, le test pouvait bien se simplifier, mais le test avec XOR est équivalent, bien que peu repandue.

  11. #11
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    Le résultat est équivalent, en revanche il me semble que dans un XOR les 2 propositions doivent être évaluées, contrairement au OR où la 2e proposition n'est évaluée que si la 1re est false (il me semble ).
    Vive les roues en pierre

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Le ou exclusif, n'existe pas en C... Du moins pour les opérateurs logiques(&&, ||).
    Effectivement, pour les opérateurs bits à bits, c'est ^, mais aucune utilitée ici...

    Le problème normalement si tu gères tes events à la manière de monsieur tou le monde, genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while(SDL_PollEvent(&event)
    {
       ...
    }
    tu ne peux pas tester, l'appui de 2 touches simultanément... c'est impossible!

    Il y a des solutions à bases de flags, etc...
    Le problème, c'est que la touche CAPS_LOCK, va conserver son état, pressé, non pressé...
    Il faut que tu précises ce que tu souhaites.

    Sinon, SDLK_SHIFT, n'existe pas...
    Voir du coté de SDLMod...
    Pour un truc comme ça, précise mieux le comportement attendu...
    Il suffit d'une pression sur la touche majeur (CAPS_LOCK), pour que toutes les solutions proposées jusque là soient nulles.

  13. #13
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Sachez juste, que j'ai fait une chose de grave en écrivant ma réponse. C'est que j'ai répondu sous le coup de la colère ( je m'en excuse ). Vu que notre cher ami qui a ouvert le projet à dit qu'il ne trouvait rien dans la documentation.

    Du coup, je n'ai pas faut plus de recherche que cela, et j'ai écrit ma réponse que sur des souvenirs ( et sur les flags présenté par l'ouvreur de sujet )

    Après pour donner des réponses plus claires, il semble que l'auteur veut juste savoir si l'utilisateur a appuyé sur une touche ou une autre. Ce n'est pas deux touches ( Enfin c'est ma compréhension ).
    Après, le test équivalent à cette lecture c'est bien sur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( key == TOUCHE1 || key == TOUCHE2 )
    Avec une récupération des évènements à la Monsieur tout le monde. D'ailleurs je me demande quel est le résultat d'un appuie sur les deux touches en même temps, surement deux tours dans la boucle pour traiter deux évènements distincts. ( Donc potentiellement deux actions ). Donc peut être que cela ne pose pas de problème ( dépendant de l'objectif final ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Gestion clavier souris en multijoueurs
    Par billynirvana dans le forum Développement 2D, 3D et Jeux
    Réponses: 15
    Dernier message: 28/12/2006, 17h12
  2. [C#]Gestion clavier d'un textbox
    Par Mictou dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/09/2006, 23h21
  3. Gestion clavier dans une form avec dbgrid
    Par albedo dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/04/2006, 15h42
  4. [GLUT] Gestion clavier, touches concurentes
    Par djfab dans le forum OpenGL
    Réponses: 9
    Dernier message: 04/05/2005, 00h25
  5. [Delphi]Gestion Clavier
    Par Dr@ke dans le forum GLUT
    Réponses: 2
    Dernier message: 26/02/2005, 14h13

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