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
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
Une simple lecture de la doc SDL te donneras la réponse.
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.
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 )
Voilà en une ligne.
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) )
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.
Le XOR, c'est ^
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (keys.keysym.key == SDLK_SHIFT ^ keys.keysym.key == SDLK_CAPSLOCK)
code non tester, mais ca devrait fonctionner.
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
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.
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.
Hum, c'est bien ce que je dis :
si :
alors :
Code : Sélectionner tout - Visualiser dans une fenêtre à part keys.keysym.key == SDLK_SHIFT
donc le test est inutile et équivaut à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part keys.keysym.key != SDLK_CAPSLOCK
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
Effectivement, le test pouvait bien se simplifier, mais le test avec XOR est équivalent, bien que peu repandue.
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
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
tu ne peux pas tester, l'appui de 2 touches simultanément... c'est impossible!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while(SDL_PollEvent(&event) { ... }
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.
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:
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 ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if ( key == TOUCHE1 || key == TOUCHE2 )
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager