Evénement Keypress en C ++

J’utilise actuellement GetAsyncKeyState() pour détecter les événements Keydown, mais les événements seront répétés pendant que vous maintenez la touche enfoncée.

Quel serait un moyen facile d’empêcher la répétition de l’événement?

Exemple

Si je maintiens la touche i de mon clavier pendant un moment, j’obtiendra un résultat comme celui-ci:

 iiiiiiiiiiiiiiiiiiiiiiiii 

Au lieu de cela:

 i 

Je veux forcer l’utilisateur à appuyer de nouveau sur la touche pour déclencher l’événement.

Évitez d’utiliser un message lié au clavier tel que WM_KEYDOWN ou WM_CHAR pour détecter une clé. Windows répète WM_KEYDOWN lorsque l’utilisateur la maintient. Vous avez simplement besoin d’un drapeau de type bool qui garde la trace de l’état de la clé. Modifiez uniquement l’état de votre object de jeu lorsque vous constatez une différence entre l’état signalé par GetAsyncKeyState () et cet indicateur. Grossièrement:

 bool movingLeft = false; ... if ((GetAsyncKeyState(VK_LEFT) < 0) != movingLeft) { movingLeft = !movingLeft; gameObject->setVelocity(movingLeft ? -10 : 0); } 

Utilisez les événements KeyPress (ou KeyUp).

Btw selon MSDN SHORT WINAPI GetAsyncKeyState (__ in int vKey);

Détermine si une touche est active ou non au moment de l’appel de la fonction et si elle a été enfoncée après un précédent appel à GetAsyncKeyState.

Il ne dit rien sur la détection d’un événement keydown.