begin process at 2012 05 28 08:39:15
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

clavier : detection de plusieurs touches simultannées


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

clavier : detection de plusieurs touches simultannées

mercredi 17 septembre 2008 à 03:47:31 | clavier : detection de plusieurs touches simultannées

WolfSpirit

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.

voici comment je procède :
    if(GetAsyncKeyState(VK_F1) & 0x8000) button[0] = true; else button[0] = false;
    if(GetAsyncKeyState(VK_F2) & 0x8000) button[1] = true; else button[1] = false;
    if(GetAsyncKeyState(VK_F3) & 0x8000) button[2] = true; else button[2] = false;
    if(GetAsyncKeyState(VK_F4) & 0x8000) button[3] = true; else button[3] = false;
    if(GetAsyncKeyState(VK_F5) & 0x8000) button[4] = true; else button[4] = false;
    if(GetAsyncKeyState(VK_SPACE) & 0x8000) button[5] = true; else button[5] = false;
    if(GetAsyncKeyState(VK_RETURN) & 0x8000) button[6] = true; else button[5] = false;


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 ?

Merci.
mercredi 17 septembre 2008 à 11:26:16 | Re : clavier : detection de plusieurs touches simultannées

DeAtHCrAsH

Salut,
Essayes plutôt de passer par un hook clavier, tu auras surement un meilleures résultats.
Tu trouveras de nombreuses sources sur ce site.

Shell
mercredi 17 septembre 2008 à 12:08:44 | Re : clavier : detection de plusieurs touches simultannées

WolfSpirit

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 ?
mercredi 17 septembre 2008 à 15:24:32 | Re : clavier : detection de plusieurs touches simultannées

DeAtHCrAsH

Pour rappel, ton hook doit se faire dans une dll.
Le paramètre hMod (HINSTANCE) sera mis à NULL car rattaché au thread appellant, soit ton jeu sdl.

mercredi 17 septembre 2008 à 15:31:35 | Re : clavier : detection de plusieurs touches simultannées

WolfSpirit

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 ?
mercredi 17 septembre 2008 à 15:43:07 | Re : clavier : detection de plusieurs touches simultannées

WolfSpirit

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 ;)
mercredi 17 septembre 2008 à 22:04:53 | Re : clavier : detection de plusieurs touches simultannées

racpp

Administrateur CodeS-SourceS
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.
jeudi 18 septembre 2008 à 12:47:10 | Re : clavier : detection de plusieurs touches simultannées

WolfSpirit

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 :)


Cette discussion est classée dans : button, getasynckeystate, vk, if, 0x8000


Répondre à ce message

Sujets en rapport avec ce message

Programme Trop Lent [ par Lemng ] Bonjour tout le monde,voici mon problème : j'utilise la SDL pour programmer un jeu se jouant a l'aide du clavier et de la souris de la manière suivant snack grandi quand il mange (winapi) [ par dyroj ] salut a tous,qui peut me trouver un algorithme sur le sujet suivant:je suis en train de créer un snack mais je narrive pas a faire grandir quand il ma [OpenGL] Diriger mon cube a gauche et a droite et sans rotation (pour l'instant) [ par FPSQuentin ] Bonjour a tous. J'ai réussi a faire un cube en 3D et j'arrive à faire avancer et reculer mon cube mais se que je n'arrive pas à faire, c'est que l'on décompte multiclic [ par cghes ] bonjour à tous!Je sonne la tirette d'aide car après plus d'un essai je ne arrive pas...voila je viens de mettre en place un systeme de ptc ( pay to cl radiobutton dans groupebox [ par dyroj ] Mes salutation a touse,Je voudrais grouper des radiobutton dans un groupebox de maniere a ce que quand je click sur un radiobutton il se coché celui q Petit probleme avec injection de dll [ par ghostichou ] Tout d'abord je tiens à vous préciser que j'ai deja regarder les autres sujets parlant de ça sur code sources mais même en les relisant je n'arrive pa Calculateur 32bits ... problème de débordement !!! [ par boguista ] j'ai à coder le calcul suivant :S= c. [(a.b + (a+b).2^15 + 2^30)/2^32] sachant que a, b et c sont sur 16 bitsAvez vous un algorithme précis qui puisse gestion evenement en sdl [ par jilou2008 ] bonjour j ai creer un petit programme en c++ avec sdl , j utilise le joystick pour deplacer une image sur l ecran et la coller ensuite seulement pour char* dans un destructeur [ par pepsidrinker ] Premierement, merci de lire ce post, et merci a tous ceux qui veulent maider. Jai le probleme suivant: Jassigne des char* avec 'new[]' dans le constru comparaison de 2 fichiers texte à l'aide d'un programme C [ par Yanis1973 ] Bonjour tt le monde, Si quelqu'in pourrait m'aider sur un ce probleme , je serais tiré d'affaire. merci d'avance. Voila j'ai un programme en c qui per


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales