Architecture du flux d’entrée
GameInput repose sur le 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 flux unique et contigu d’événements d’entrée, dans l’ordre dans lequel elles 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.
- Un double appui sur un bouton peut correspondre à un combo ou à un mouvement différent d’un appui simple.
- L’ordre dans lequel deux boutons ont été enfoncés peut avoir de l’importance.
- Le temps écoulé entre deux appuis sur des boutons peut avoir de l’importance.
Interfaces
L’API GameInput est exposée par le biais d’un ensemble d’interfaces associées, à l’image 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 permettant de récupérer les lectures du flux d’entrée, d’inscrire des rappels et d’accéder à d’autres fonctionnalités globales. -
IGameInputReadingreprésente un élément unique du flux d’entrée. Elle contient des méthodes permettant de récupérer les données d’état d’entrée stockées dans la lecture et d’accéder au périphérique qui a généré la lecture. Les lectures servent également 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 périphérique d’entrée unique connecté au système. Elle contient des méthodes permettant de récupérer les propriétés et l’état actuel du périphérique, ainsi que des méthodes permettant de contrôler le retour haptique et le retour de force sur le périphérique. Elle contient également des méthodes permettant d’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 s’il 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 comptage de références et la réflexion, l’infrastructure du runtime COM n’est pas utilisée par GameInput. Concrètement, cela signifie ce qui suit.
- Les applications n’appellent ni
CoInitializeniCoCreateInstancepour obtenir des instances d’objets. - Les fonctionnalités COM telles que l’agrégation et les implémentations d’interfaces fournies par l’appelant ne sont pas prises en charge.
- Il n’y a pas de prise en charge du marshaling interprocessus, 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 conduit 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. Dans le cas contraire, l’état retourné contient des valeurs neutres ou « au repos », comme si l’utilisateur ne touchait pas du tout le périphérique. Cela évite d’avoir à écrire du 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. Tout retour haptique ou retour de force envoyé à un périphérique est désactivé lorsqu’une application perd le focus. Elle peut toujours appeler les API GameInput pour définir un nouvel état de retour, mais ce nouvel état ne sera pas envoyé au périphérique. Lorsque l’application récupère le focus, le dernier état de retour qu’elle a demandé est automatiquement envoyé au périphérique. Par conséquent, les applications n’ont aucune action particulière à effectuer en matière d’entrée ou de retour haptique/de force lorsqu’elles obtiennent ou perdent le focus. L’API GameInput fait toujours ce qu’il faut à leur place.Documentation de référence de l’API
- GameInput (contenu de l’API)
- Fonctions
