-
SDL_GetKeyState()
Bonjour,
Alors voila, cela fais plusieurs jour que j'essaye de percer ce mystère mais je n'y arrive pas.
En fait, quand j'utilise SDL_GetKeyState(), je m'aperçois que mon programme refuse complètement de gérer plus de deux touches, c'est a dire qu'il va prendre en compte la première touche appuyer, la deuxième mais quelle que soit la troisième, il n'y prêtera pas attention.
Étant donnée que c'était mes premiers test avec cet fonction, j'ai télécharger les codes sources dans le tutoriel de développez (merci Loka :) ) pour en avoir le cœur net. Rebelote, le PC refuse de comprendre quoi que ce soit.
Je voudrais savoir d'où peut bien venir un tel comportement et par la même occasion a quoi sert le paramètre que l'on envoie a SDL_GetKeyState().
J'ai un Compaq Presario C700 avec VISTA dessus (arrêter de me lapider siouplait ) et je compile avec code::block ( si ça peut aider ... ).
Voila, voila, merci par avance des explication qui pourrait m'éviter une crise de nerf avec mon pC .
-
Bonjour,
L'argument que prend SDL_GetKeyState() est un pointeur sur un int ,pour que la SDL t'indique la taille du tableau qui contient l'état des touches.
Il se peut, que le problème vienne directement de ton clavier. Car certain clavier ( pour certaine touches normalement ) n'accepte pas l'appuie sur trois touches en même temps.
Peut poser problème sur un jeu du type de Frets on Fire :s
Donc je te conseille de faire un autre test avec soit un clavier branchée par USB , soit un autre PC.
Au sinon, si tu es archi sur que cela vient du code, poste la partie qui utilise le SDL_GetKeyState()
-
Je suis sur que le problème ne vient pas du code, c'est impossible puisque pour faire les test, j'ai pris le code source de Loka dans son tutoriel de SDL.
Pour essayer de mieux cerner le problème, j'ai remplacer
if( keystates[ SDLK_LEFT ] )
par if( keystates[ SDLK_r ] )
J'ai compiler et lancer l'exécutable, et la, Ô surprise,les trois touche directionnel droite - haut - bas ne peuvent pas être gérés en même temps mais on peut gérer R en même temps que deux touche directionnel ....
Si je remplace if( keystates[ SDLK_RIGHT ] )
par if( keystates[ SDLK_z] )
et que je re-teste, le problème de base survient a nouveau, impossible de gérer plus de deux touche .......
Ton idée du clavier m'intéresse LittleWhite. Tu peux m'expliquer plus précisément ce que tu veux dire ? est ce que c'est seulement le clavier qui gênerai ( et donc brancher un autre clavier résoudrait mon problème ) ou l'OS pourrait être impliquer dans cette histoire ?
Merci beaucoup pour n'importe quelle piste ou explication qui pourrait m'amener a comprendre ce qui se passe dans ce foutu pC ...
-
Certains clavier ne supportent effectivement pas certaines combinaison de touches, cela vient de la manière dont ils sont construits (les touches sont reliées en lignes et en colonnes -- je n'en sais pas plus et impossible de retrouver l'article qui en parlait).
Il me semble que les claviers USB ne souffrent pas de ce problème, tout comme les claviers haut de gamme pour gamers.
-
Merci pour vos réponses =)
Je vais essayer de me renseigner chez un spécialiste ou dans un magasin specialiser pour faire le point sur le problème de clavier.
Je vais aussi essayer de me dégoter un clavier usb pour faire des test et je vous tiendrez au courant.
-
Les claviers USB , semble mieux, mais ne sont pas parfait pour autant.
Les claviers pour gamers sont surement très bon. Mais je ne sais pas quoi conseillé pour éviter ce cas, à part faire un test avant.
Et oui, c'est un problème technique. Plusieurs touches sont reliés à un même fil. Lorsque on appuie sur une touche, on repère la touche , mais lorsque l'on appuie sur deux touches à la fois, l'une d'entre elle peut cacher le signal de l'autre.
( Rappel , chaque touche occupe une sorte tableaux, ou il y a une touche par case. Les colonnes et lignes sont en fait des fils electriques qui relient les touchent. Lorsqu'on appuie sur une touche , on voit sur le fil électrique le répercution de la touche appyué. Pour savoir la quelle que c'est on a juste à regarder la ligne actionnée ( ou il y a eu le changement d'état) et la colonne.
Bon c'est sur que expliquer par moi ça donne pas grand chose :s )
-
Je confirme le problème des claviers, par exemple au boulot on a des claviers qui ne gère pas certaines combinaisons de touches (bloqués parfois à 2 touches, parfois à 3 touches selon les combinaisons), problème que je ne possède pas chez moi.