Architecture du flux d’entrée
GameInput est construit autour du concept de flux d’entrée : les entrées de tous les périphériques connectés au système sont dirigées vers un seul flux contigu d’événements d’entrée, dans l’ordre où les entrées se sont produites. Lorsque plusieurs périphériques génèrent des entrées simultanément, il en résulte un entrelacement naturel des événements d’entrée. Voici un exemple de flux d’entrée provenant de plusieurs périphériques d’entrée.
- Appuyer deux fois rapidement sur un bouton pourrait correspondre à un combo ou à un mouvement différent d’un appui simple.
- L’ordre dans lequel deux boutons ont été enfoncés pourrait être important.
- Le temps écoulé entre deux appuis sur des boutons pourrait être important.
Interfaces
L’API GameInput est exposée au moyen d’une collection d’interfaces connexes, à l’instar des API graphiques et audio, comme le montre le diagramme suivant.
-
IGameInputest l’interface de base obtenue en appelant la fonction de fabriqueGameInputCreate. Elle contient des méthodes pour récupérer les lectures du flux d’entrée, inscrire des rappels et accéder à d’autres fonctionnalités globales. -
IGameInputReadingreprésente un seul élément du flux d’entrée. Elle contient des méthodes pour récupérer les données d’état d’entrée stockées dans la lecture et pour accéder au périphérique qui a généré la lecture. Les lectures servent aussi de points de référence dans le flux d’entrée lors du parcours vers l’avant et vers l’arrière des autres lectures du flux. -
IGameInputDevicereprésente un seul périphérique d’entrée connecté au système. Elle contient des méthodes pour récupérer les propriétés et l’état actuel du périphérique, ainsi que des méthodes pour contrôler la rétroaction haptique et la rétroaction de force sur le périphérique. Elle contient aussi des méthodes pour effectuer des E/S brutes de bas niveau sur le périphérique.
Comme les API graphiques et audio, GameInput n’est pas une véritable API COM, même si elle expose des interfaces dérivées de IUnknown. Ce style d’API est parfois appelé « COM lite » ou « nano-COM ». Bien que IUnknown soit utilisé pour le décompte de références et la réflexion, l’infrastructure du runtime COM n’est pas utilisée par GameInput. Plus précisément, cela signifie ce qui suit.
- Les applications n’appellent ni
CoInitializeniCoCreateInstancepour obtenir des instances d’objets. - Les fonctionnalités COM comme l’agrégation et les implémentations d’interfaces fournies par l’appelant ne sont pas prises en charge.
- Il n’y a aucune prise en charge du marshaling entre processus, ni de modèle d’apartment ou de threading. Tous les objets sont agiles.
- Les pointeurs d’interface peuvent être comparés directement pour déterminer l’identité des objets, sans passer par IUnknown.
- Les méthodes ne sont pas tenues de retourner des codes
HRESULT, ce qui mène souvent à des signatures de fonctions plus simples.
Focus de l’application
Sur console, GameInput fournit des entrées à une application uniquement lorsqu’elle a le focus. Sinon, l’état retourné contient des valeurs neutres ou « au repos », comme si l’utilisateur ne touchait pas du tout le périphérique. Cela élimine le besoin de code d’entrée supplémentaire pour gérer les changements de focus. Sur PC, par défaut, les entrées (y compris les boutons système) sont envoyées aux applications qui ont le focus. Ce comportement peut être modifié à l’aide de la méthode SetFocusPolicy. Toute rétroaction haptique ou rétroaction de force envoyée à un périphérique est désactivée lorsqu’une application perd le focus. L’application peut toujours appeler les API GameInput pour définir un nouvel état de rétroaction, mais ce nouvel état ne sera pas envoyé au périphérique. Lorsque l’application retrouve le focus, le plus récent état de rétroaction demandé par l’application est automatiquement envoyé au périphérique. Par conséquent, les applications n’ont aucune action particulière à effectuer concernant les entrées ou la rétroaction haptique ou de force lorsqu’elles obtiennent ou perdent le focus. L’API GameInput fait toujours ce qu’il faut en leur nom.Documentation de référence de l’API
- GameInput (contenu de l’API)
- Fonctions
