Clavier : detection de plusieurs touches simultannées
WolfSpirit
Messages postés20Date d'inscriptionmardi 9 avril 2002StatutMembreDernière intervention18 septembre 2008
-
17 sept. 2008 à 03:47
WolfSpirit
Messages postés20Date d'inscriptionmardi 9 avril 2002StatutMembreDernière intervention18 septembre 2008
-
18 sept. 2008 à 12:47
Bonjour,
Je m'amuse à coder un petit jeu de rythme type guitar hero.
J'ai donc besoin d'un traitement clavier très réactif, et de + il faut souvent détecter des appuis sur + de 3 touches à la fois.
J'ai bien essayé avec getAsyncKeyState mais à priori cette commande est obsolète quand il y a + de 3 touches appuyées à la fois ... et il semble que quand je change très vite de touches appuyées le traitement ne suit pas.
il me suffit après de tester les booléens button[x]...
mais comme je l'ai dit plus haut lorsque j'appuis sur + de 3 touches à la fois ça ne marche pas, comment pourrais-je faire ? et sinon existe-t-il une lib spécialisée dans les traitements lourds du clavier ?
WolfSpirit
Messages postés20Date d'inscriptionmardi 9 avril 2002StatutMembreDernière intervention18 septembre 2008 17 sept. 2008 à 12:08
Merci,
j'ai essayé d'utiliser un hook mais le problème c'est que j'ai fait ce jeu en SDL et je ne trouve pas comment récupérer le hInstance qui est demandé dans la fonction SetWindowsHookEx avec SDL... quelqu'un a une idée ?
WolfSpirit
Messages postés20Date d'inscriptionmardi 9 avril 2002StatutMembreDernière intervention18 septembre 2008 17 sept. 2008 à 15:31
Oula, ça m'a l'air compliqué pour un petit jeu de rythme quand même ... :p
Y'a pas un moyen plus simple avec DirectInput par exemple de savoir si + de 3 touches sont enfoncées ? sans parler forcemment de hook, parce que je trouve que là ça commence à partir loin pour ce que c'est :p
J'ai recodé tout le coeur du jeu en DirectX, donc je peux maintenant l'utiliser, seul hic je viens de me rendre compte que lui aussi dès qu'on a plus de 3 touches enfoncées il ne compte pas la 4eme ...
Alors, y'a moyen concretement sans hook ou pas ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
WolfSpirit
Messages postés20Date d'inscriptionmardi 9 avril 2002StatutMembreDernière intervention18 septembre 2008 17 sept. 2008 à 15:43
Bon je viens de vérifier dans un autre jeu de rythme, c'est pareil, quand j'appuie sur plus de 3 touches à la fois il comprend pas, c'est pas dû à mon programme spécialement ^^
je vais donc me débrouiller comme ça, en tout cas en recodant en DX au lieu de SDL j'ai gagné une énorme rapidité sur la gestion du clavier ! donc tant mieux :)
merci pour l'aide en tout cas DeAtHCrAsH ;)
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 17 sept. 2008 à 22:04
Salut,
Pour lire l'état courant de toutes les touches du clavier il existe GetKeyboardState(). Cette fonction copie l'état actuel du clavier dans un tableau de 256 octets. Les codes virtuels (VK_xxx) seront utilisés comme indexes du tableau pour tester l'état d'une seule touche ou d'un groupe de touches. Puisque l'état des touches est exprimé sous forme de bits, on peut créer une petite fonction qui retourne, dans un autre tableau, les codes virtuels de toutes les touches enfoncées actuellement.
Pour le hook clavier, tu peux te passer de DLL sous Windows 2000, XP ou Vista. Tu trouveras, parmi mes codes sources, un exemple à ce sujet.
Pour la réactivité, je pense que tu ne trouveras pas mieux que DirectInput.
WolfSpirit
Messages postés20Date d'inscriptionmardi 9 avril 2002StatutMembreDernière intervention18 septembre 2008 18 sept. 2008 à 12:47
Ouais merci :)
je savais pour le GetKeyboardState, mais le problème vient de mon clavier je pense, c'est simple, quand j'appuie par exemple sur F1 + F2 + F3, il ne détecte que F1 et F2 enfoncées, pourtant si je fais F2 + F3 + F4 là ça passe ... ça dépend de quelles touches j'enfonce à la fois... et pour 4 ou 5 touches à la fois j'oublie c'est même pas la peine. Par contre, j'ai branché un périphérique qui a remplacé mon clavier sur mon ordi (une WiiGuitar) et là, quand j'appuie sur les 5 frettes à la fois, j'ai bien les 5 touches qui s'allument. Le problème viendrait donc, à priori, du clavier. Mais c'est bisarre car j'ai testé sur 2 claviers différents, même problème. Enfin bon, ça ne me dérange pas trop pour la suite donc ça va. Et puis j'ai tout passé de SDL à DX, j'ai donc gagné énormément en performances, et ça me permet d'utiliser DInput aussi :)