Stick arcade

Cette page décrit les principes de base de la programmation pour les sticks d’arcade Xbox One à l’aide de Windows.Gaming.Input.ArcadeStick et des API associées pour le 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 l’ajout ou la suppression d’un stick arcade
  • Lire les entrées provenant d’un ou de plusieurs sticks arcade
  • comment les sticks arcade se comportent en tant qu’appareils de navigation de l’interface utilisateur

Vue d’ensemble des sticks arcade

Les sticks arcade sont des périphériques d’entrée appréciés pour leur capacité à reproduire la sensation des machines d’arcade autonomes et pour leurs contrôles numériques de haute précision. Les sticks arcade constituent le périphérique d’entrée parfait pour les combats tête à tête ou d’autres jeux de type arcade. Ils conviennent à tous les jeux qui fonctionnent bien avec des contrôles entièrement numériques. Les sticks arcade sont pris en charge dans les applications UWP Windows 10 et Xbox One par l’espace de noms Windows.Gaming.Input.

Les sticks d’arcade Xbox One sont équipés d’un joystick 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 par S1 et S2) ; il s’agit d’appareils d’entrée tout numérique qui ne prennent pas en charge les contrôles analogiques ou les vibrations. Les sticks d’arcade Xbox One sont également équipés de boutons Affichage et Menu utilisés pour prendre en charge la navigation de l’interface utilisateur, mais ils ne sont pas destinés à prendre en charge les commandes de jeu et ne sont pas facilement accessibles en tant que boutons de joystick.

Stick Arcade avec joystick à 4 directions, 6 boutons d’action (A1-A6) et 2 boutons spéciaux (S1 et S2)

Navigation d’interface utilisateur

Pour faciliter la prise en charge de nombreux périphériques d’entrée différents pour la navigation dans l’interface utilisateur, et améliorer la cohérence entre les jeux et les périphériques, la plupart des périphériques d’entrée physiques jouent simultanément le rôle de périphérique d’entrée logique distinct, appelé contrôleur de navigation d’interface utilisateur. Le contrôleur de navigation d’interface utilisateur fournit un vocabulaire commun pour les commandes de navigation dans l’interface utilisateur, sur plusieurs périphériques d’entrée.

En tant que contrôleur de navigation de l’interface utilisateur, les sticks arcade mappent l’ensemble de commandes de navigation requis au joystick et aux boutons Affichage, Menu, Action 1 et Action 2 .

Commande de navigation Entrée stick arcade
Haut Stick vers le haut
Descendre Stick vers le bas
Gauche Stick vers la gauche
Droit Stick vers la droite
Affichage Bouton Afficher
Menu Bouton Menu
Accepter Bouton Action 1
Annuler Bouton Action 2

Les sticks arcade ne mappent aucun ensemble facultatif de commandes de navigation.

Détecter et suivre des sticks arcade

La détection et le suivi des sticks d’arcade fonctionnent exactement de la même manière que pour les boîtiers de commande, sauf avec la classe ArcadeStick au lieu de la classe Gamepad . Pour plus d’informations, consultez Boîtier de commande et vibrations .

Lecture des entrées du stick arcade

Une fois que vous avez identifié le stick arcade qui vous intéresse, vous pouvez commencer à collecter les entrées de ce stick. Toutefois, contrairement à d’autres sortes d’entrées que vous connaissez peut-être, les sticks arcade ne communiquent pas les changements d’état en déclenchant des événements. À la place, vous devez interroger régulièrement ces boîtiers de commande pour connaître leur état actuel.

Interroger le stick arcade

Le processus d’interrogation capture un instantané du stick arcade à un moment précis. Cette approche de la collecte d’entrées convient parfaitement à la plupart des jeux, car leur logique s’exécute généralement dans une boucle déterministe plutôt que d’être pilotée par les événements ; il est également généralement plus simple d’interpréter les commandes de jeu à partir d’une entrée collectée en même temps que de nombreuses entrées uniques collectées au fil du temps.

Vous interrogez un stick arcade en appelant la fonction GetCurrentReading. Cette fonction renvoie un ArcadeStickReading qui contient l’état du stick arcade.

L’exemple de code suivant interroge un stick arcade pour obtenir son état actuel.

auto arcadestick = myArcadeSticks[0];

ArcadeStickReading reading = arcadestick->GetCurrentReading();

En plus de l’état du stick arcade, chaque valeur comprend un horodatage qui indique précisément le moment d’extraction de cet état. Cet horodatage est utile pour faire le lien avec le minutage des valeurs précédentes ou de la simulation de jeu.

Lecture des boutons

Chacun des boutons du stick arcade (les quatre directions du joystick, les six boutons Action et deux boutons Spéciaux ) fournit une lecture numérique qui indique s’il est enfoncé (bas) ou relâché (haut). Pour plus d’efficacité, les lectures de boutons ne sont pas représentées sous forme de valeurs booléennes individuelles ; au lieu de cela, ils sont tous regroupés dans un champ de bits unique qui est représenté par l’énumération ArcadeStickButtons .

Notes

Les sticks Arcade sont équipés de boutons supplémentaires utilisés pour la navigation de l’interface utilisateur, tels que les boutons Affichage et Menu . Ces boutons ne figurent pas dans l’énumération ArcadeStickButtons. Leurs entrées sont lues uniquement quand le stick arcade est utilisé comme périphérique de navigation d’interface utilisateur. Pour plus d’informations, consultez Périphérique de navigation d’interface utilisateur.

Les valeurs des boutons sont lues à partir de la propriété Buttons de la structure ArcadeStickReading. Comme 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 enfoncé (bas) lorsque le bit correspondant est défini ; sinon, il est libéré (up).

L’exemple suivant détermine si le bouton Action 1 est enfoncé.

if (ArcadeStickButtons::Action1 == (reading.Buttons & ArcadeStickButtons::Action1))
{
    // Action 1 is pressed
}

L’exemple suivant détermine si le bouton Action 1 est libéré.

if (ArcadeStickButtons::None == (reading.Buttons & ArcadeStickButtons::Action1))
{
    // Action 1 is released (not pressed)
}

Parfois, vous pouvez déterminer quand un bouton passe d’un bouton enfoncé à relâché ou relâché à un bouton enfoncé, si plusieurs boutons sont enfoncés ou relâchés, ou si un ensemble de boutons sont organisés d’une manière particulière (certains appuyés, d’autres non). Pour plus d’informations sur la détection de ces états, consultez Détecter les changements d’état des boutons et Détecter les dispositions de boutons complexes.

Exécuter l’exemple InputInterfacing

L’exemple InputInterfacingUWP (github) montre comment utiliser les sticks arcade en tandem avec différents types de périphériques d’entrée. Il illustre aussi le comportement de ces périphériques d’entrée utilisés comme contrôleurs de navigation d’interface utilisateur.

Voir aussi