GameInput.
Entrée clavier
La méthode GetKeyState récupère le code de balayage et les données de touche virtuelle de chaque touche enfoncée d’un clavier. Ces données d’entrée sont ensuite renvoyées sous la forme d’un tableau de longueur variable de structures GameInputKeyState. Une touche enfoncée est une touche maintenue au moment où le clavier a signalé une entrée. La fréquence à laquelle les claviers signalent les entrées varie, généralement de 125 Hz à 1 000 Hz. L’état du clavier est signalé séparément pour chaque clavier connecté au système. L’état rudimentaire du clavier est destiné à associer l’entrée clavier à des actions de jeu, comme le déplacement ou le tir d’une arme. Il n’est pas destiné à la saisie de texte normale ni aux autres API utilisées à cette fin.Lecture de l’état des touches
Utilisez le code suivant pour implémenterGameInput pour les claviers et les souris dans votre titre.
stateArray transmis à GetKeyState est plus grand que le nombre de touches enfoncées, les éléments excédentaires du tableau ne sont ni écrits ni mis à zéro. À l’inverse, si stateArray est plus petit que le nombre de touches enfoncées, le tableau est rempli et les touches enfoncées excédentaires sont ignorées.
GetKeyCount permet de garder une taille maximale de tableau réduite. La taille maximale peut être interrogée via l’interface IGameInputDevice.
Notez que le membre codePoint spécifie le glyphe que le système pense être imprimé sur la touche associée, en fonction de la disposition de clavier actuelle. Il est destiné à afficher une représentation de la touche dans une interface de mappage des entrées, et non à construire des chaînes de saisie de texte.
Entrée souris
La méthode GetMouseState récupère l’état de déplacement et des boutons d’une souris, qui est renvoyé dans une seule structure GameInputMouseState, comme illustré dans le code suivant. Comme l’état du clavier, l’état de la souris est signalé séparément pour chaque souris connectée au système. <!—As with keyboard input, the CreateAggregateDevice method on theIGameInput interface is used to get the combined system mouse state.> —>
Lecture des déplacements de la souris
Les déplacements de la souris sont signalés nativement sous la forme d’une série de valeurs delta, plutôt que sous la forme d’une position absolue. Cela n’est pas compatible avec la nature d’interrogation deGetCurrentReading, car demander périodiquement la lecture actuelle de la souris risque de manquer plusieurs deltas intermédiaires.
Plutôt que d’utiliser GetNextReading pour parcourir potentiellement des dizaines de lectures historiques de la souris et additionner les deltas, ceux-ci sont cumulés dans des valeurs virtuelles positionX et positionY. À partir de là, les deltas sont calculés en soustrayant les valeurs positionX et positionY des lectures précédemment obtenues. Les deltas individuels sont accessibles en parcourant toutes les lectures intermédiaires, ou via les deltas cumulés lorsque des lectures intermédiaires ont été ignorées.
Les valeurs positionX et positionY sont la somme de tous les deltas de déplacement. Ces valeurs ne sont en aucun cas corrélées aux coordonnées de l’espace écran. La valeur delta cumulée ne concerne que les événements de souris qu’un processus reçoit lorsqu’il a le focus d’entrée.
