Stick arcade
Cet article présente les principes de base de la programmation pour des sticks arcade en utilisant Windows.Gaming.Input.ArcadeStick et les API associées pour la plateforme Windows universelle (UWP).
Voici ce que vous allez apprendre à la lecture de cet article :
- obtenir une liste des sticks arcade connectés et de leurs utilisateurs
- détecter qu’un stick arcade a été ajouté ou supprimé
- lire les entrées provenant d’un ou de plusieurs sticks arcade
- comportement des sticks arcade en tant que périphérique de navigation de l’interface utilisateur
Vue d’ensemble du stick arcade
Les sticks arcade sont des périphériques d’entrée appréciés pour reproduire la sensation des périphériques arcade verticaux et pour leurs contrôles numériques haute précision. Les sticks arcade sont des périphériques d’entrée parfaits pour les combats en tête à tête et d’autres jeux de type arcade. Ils s’adaptent à n’importe quel jeu fonctionnant avec tous les contrôles numériques. Les sticks arcade sont pris en charge dans les applications UWP pour Windows 10 ou Windows 11 et les applications Xbox One via l’espace de noms Windows.Gaming.Input.
Les sticks arcade sont équipés d’une manette de jeu numérique 8 voies, de six boutons Action (représentés sous la forme A1-A6 dans l’image ci-dessous) et de deux boutons Spéciaux (représentés en tant que S1 et S2). Ce sont des appareils d’entrée numérique qui ne prennent pas en charge les contrôles analogiques ou les vibrations. Les sticks arcade comportent également les boutons Afficher et Menu utilisés pour prendre en charge la navigation de l’interface utilisateur. Cependant, ils ne sont pas conçus pour prendre en charge les commandes de jeu ni pour être utilisés comme des boutons de manette de jeu.
Navigation de l’interface utilisateur
Pour réduire la difficulté associée à la prise en charge de plusieurs périphériques d’entrée différents lors de la navigation dans l’interface utilisateur, et pour favoriser la cohérence entre les jeux et les périphériques, la plupart des périphériques d’entrée physiques agissent simultanément en tant que périphérique d’entrée logique distinct, appelé contrôleur de navigation de l’interface utilisateur. Le contrôleur de navigation de l’interface utilisateur fournit un vocabulaire commun pour les commandes de navigation de l’interface utilisateur sur les périphériques d’entrée.
Quand ils sont utilisés comme contrôleurs de navigation de l’interface utilisateur, les sticks arcade mappent l’ensemble requis de commandes de navigation à la manette de jeu ainsi qu’aux boutons Afficher, Menu, Action 1 et Action 2.
Commande de navigation | Entrée de stick arcade |
---|---|
Haut | Stick vers le haut |
Descendre | Stick vers le bas |
Left | Stick vers la gauche |
Right | Stick vers la droite |
Afficher | Bouton Afficher |
Menu | Bouton Menu |
Accepter | Bouton Action 1 |
Annuler | Bouton Action 2 |
Les sticks arcade ne mappent aucun ensemble facultatif des commandes de navigation.
Détection et suivi des sticks arcade
La détection et le suivi des sticks arcade fonctionnent exactement de la même façon que pour les boîtiers de commande, mais avec la classe ArcadeStick au lieu de la classe Gamepad. Pour obtenir plus d’informations, consultez Boîtier de commande et vibrations.
Lecture du stick arcade
Une fois que vous avez identifié le stick arcade qui vous intéresse, vous pouvez commencer à collecter les entrées à partir de ce stick. Toutefois, contrairement à d’autres types d’entrées que vous utilisez peut-être, les sticks arcade ne communiquent pas les changements d’état en déclenchant des événements. À la place, vous devez les interroger régulièrement pour connaître leur état actuel.
Interrogation du stick arcade
L’interrogation capture un instantané du stick arcade à un moment précis. Cette approche de la collecte d’entrée est adaptée à la plupart des jeux, car leur logique s’exécute généralement dans une boucle déterministe plutôt qu’en étant pilotée par les événements. Il est également généralement plus simple d’interpréter les commandes de jeu à partir d’entrées collectées toutes en même temps plutôt que de nombreuses entrées uniques collectées au fil du temps.
Vous interrogez un stick arcade en appelant GetCurrentReading. Cette fonction retourne un ArcadeStickReading qui contient l’état du stick arcade.
L’exemple suivant interroge un stick arcade pour connaître son état actuel.
auto arcadestick = myArcadeSticks[0];
ArcadeStickReading reading = arcadestick->GetCurrentReading();
Outre l’état du stick arcade, chaque valeur comprend un timestamp qui indique précisément le moment de récupération de cet état. Le timestamp est utile pour se rapporter au minutage des lectures précédentes ou au minutage de la simulation de jeu.
Lecture des boutons
Chacun des boutons du stick arcade (les quatre boutons directionnels de la manette de jeu, les six boutons Action et les deux boutons Spéciaux) fournit une lecture numérique qui indique si le bouton est à l’état appuyé (position basse) ou à l’état relâché (position haute). Pour plus d’efficacité, les lectures de bouton ne sont pas représentées individuellement sous forme de valeurs booléennes. Elles sont toutes regroupées dans un seul champ de bits représenté par l’énumération ArcadeStickButtons.
Remarque
Les sticks arcade sont équipés de boutons supplémentaires utilisés pour la navigation de l’interface utilisateur, tels que les boutons Afficher et Menu. Ces boutons ne figurent pas dans l’énumération ArcadeStickButtons
et sont lus uniquement lors de l’accès au stick arcade comme périphérique de navigation de l’interface utilisateur. Pour obtenir plus d’informations, consultez Appareil de navigation de l’interface utilisateur.
Les valeurs des boutons sont lues à partir de la propriété Buttons
de la structure ArcadeStickReading. Étant donné que cette propriété est un champ de bits, un masquage au niveau du bit est effectué pour isoler la valeur du bouton qui vous intéresse. Le bouton est appuyé (bas) lorsque le bit correspondant est défini ; sinon, il est relâché (haut).
L’exemple suivant détermine si le bouton Action 1 est à l’état appuyé.
if (ArcadeStickButtons::Action1 == (reading.Buttons & ArcadeStickButtons::Action1))
{
// Action 1 is pressed
}
L’exemple suivant détermine si le bouton Action 1 est à l’état relâché.
if (ArcadeStickButtons::None == (reading.Buttons & ArcadeStickButtons::Action1))
{
// Action 1 is released (not pressed)
}
Il est possible que vous ayez parfois besoin de savoir quand un bouton passe de l’état appuyé à l’état relâché, ou inversement, si plusieurs boutons sont à l’état appuyé ou relâché, ou si un groupe de boutons a une disposition particulière, certains présentant l’état appuyé et d’autres l’état relâché. Pour obtenir plus d’informations sur la détection de ces conditions, consultez Détection des transitions de boutons et Détection des dispositions complexes des boutons.
Exécuter l’exemple InputInterfacing
L’exemple InputInterfacingUWP (GitHub) montre comment utiliser des sticks arcade et différents types de périphériques d’entrée en tandem, ainsi que la façon dont ces périphériques d’entrée se comportent en tant que contrôleurs de navigation de l’interface utilisateur.