Arcade-Joystick

Auf dieser Seite werden die Grundlagen der Programmierung für Arcade-Sticks mit Windows.Gaming.Input.ArcadeStick und verwandten APIs für die universelle Windows-Plattform (UWP) beschrieben.

Auf dieser Seite erhalten Sie Informationen zu folgenden Vorgängen:

  • So sammeln Sie eine Liste der verbundenen Arcade-Sticks und deren Benutzer
  • So erkennen Sie, dass ein Arcade-Stick hinzugefügt oder entfernt wurde
  • So lesen Sie die Eingabe von einem oder mehreren Arcade-Sticks
  • Verhalten von Arcade-Sticks als UI-Navigationsgeräte

Übersicht über Arcade-Sticks

Arcade-Sticks sind Eingabegeräte, die für die Wiedergabe des Gefühls von aufrecht stehenden Arcade-Geräten und für ihre präzisen digitalen Steuerungen geschätzt werden. Arcade-Sticks sind das perfekte Eingabegerät für Kopf-an-Kopf-Kämpfe und andere Spiele im Arcade Stil und eignen sich für jedes Spiel, das gut mit allen digitalen Steuerelementen funktioniert. Arcade-Sticks werden in UWP-Apps für Windows 10- oder Windows 11- und Xbox One-Apps über den Windows.Gaming.Input -Namespace unterstützt.

Arcade-Sticks sind mit einem 8-Wege-digitalen Joystick, sechs Aktionstasten (dargestellt als A1-A6 im Bild unten) und zwei Sondertasten (dargestellt als S1 und S2) ausgestattet. Alle sind digitale Eingabegeräte, die keine analogen Steuerelemente oder Vibrationen unterstützen. Arcade-Sticks sind auch mit Ansichts- und Menü -Schaltflächen ausgestattet, die zur Unterstützung der UI-Navigation verwendet werden, aber sie sind nicht für die Unterstützung von Spielbefehlen vorgesehen und können nicht leicht als Joysticktasten aufgerufen werden.

Arcade stick with 4-directional joystick, 6 action buttons (A1-A6), and 2 special buttons (S1 and S2)

Navigation in der Benutzeroberfläche

Um die Unterstützung vieler verschiedener Eingabegeräte für die Benutzeroberflächennavigation zu erleichtern und die Konsistenz zwischen Spielen und Geräten zu fördern, dienen die meisten physischen Eingabegeräte gleichzeitig als separates logisches Eingabegerät, das als UI-Navigationscontroller bezeichnet wird. Der Navigationscontroller für die Benutzeroberflächen bietet ein gängiges Vokabular für Benutzeroberflächen-Navigationsbefehle auf allen Eingabegeräten.

Als UI-Navigationscontroller ordnen Arcade-Sticks die erforderlichen Reihe an Navigationsbefehlen auf dem Joystick und Ansichts-, Menü-, Aktion 1- und Aktion 2- Schaltflächen zu.

Navigationsbefehl Eingabe für den Arcade-Stick
Up Stick nach oben
Nach unten Stick nach unten
Nach links Stick nach links
Right Stick nach rechts
Sicht Schaltfläche "Ansicht"
Menü Menüschaltfläche
Annehmen Aktionsschaltfläche 1
Abbrechen Aktionsschaltfläche 2

Arcade-Sticks ordnen keine der optionalen Sätze an Navigationsbefehlen zu.

Ermitteln und Nachverfolgen von Arcade-Sticks

Das Erkennen und Nachverfolgen von Arcade-Sticks funktioniert genauso wie für Gamepads, mit Ausnahme der ArcadeStick -Klasse anstelle der Gamepad -Klasse. Weitere Informationen finden Sie unter Gamepad und Vibration.

Lesen des Arcade-Sticks

Nachdem Sie den Arcade-Stick identifiziert haben, für den Sie sich interessieren, können Sie Eingaben von ihm erfassen. Anders als im Fall anderer Eingaben, die Sie möglicherweise kennen, teilen Arcade-Sticks Zustandsänderungen jedoch nicht durch das Auslösen von Ereignissen mit. Stattdessen müssen Sie den aktuellen Status regelmäßig lesen, indem Sie ihn abrufen.

Abfragen des Arcade-Sticks

Beim Abrufen wird eine Momentaufnahme des Arcade-Sticks zu einem genauen Zeitpunkt erfasst. Dieser Ansatz zum Erfassen von Eingaben ist für die meisten Spiele geeignet, da deren Logik in der Regel in einer deterministischen Schleife ausgeführt wird und nicht ereignisgesteuert ist. Es ist in der Regel auch einfacher, Befehle in Spielen anhand von Eingaben zu interpretieren, die zusammen erfasst werden, als anhand zahlreicher Eingaben, die über die Zeit erfasst werden.

Sie rufen einen Arcade-Stick ab, indem Sie GetCurrentReading aufrufen. Diese Funktion gibt ein ArcadeStickReading zurück, das den Zustand des Arcade-Sticks enthält.

Im folgenden Beispiel wird ein Arcade-Stick für den aktuellen Zustand abgerufen.

auto arcadestick = myArcadeSticks[0];

ArcadeStickReading reading = arcadestick->GetCurrentReading();

Zusätzlich zum Arcade-Stick-Zustand enthält jeder Lesevorgang einen Zeitstempel, der genau angibt, wann der Zustand abgerufen wurde. Der Zeitstempel ist nützlich, um sich auf die Anzeigedauer früherer Messwerte oder auf die Anzeigedauer der Spielsimulation zu beziehen.

Lesen der Tasten

Jede Taste des Arcade-Joysticks (die vier Richtungen des Joysticks, sechs Aktionstasten und zwei Sondertasten) stellt einen digitalen Ablesewert bereit, der angibt, ob sie gedrückt (unten) oder nicht gedrückt (oben) ist. Aus Effizienzgründen werden die Ablesewerte der Tasten nicht als einzelne boolesche Werte dargestellt, sondern in einem einzelnen Bitfeld zusammengefasst, das durch die Enumeration ArcadeStickButtons dargestellt wird.

Hinweis

Arcade-Sticks sind mit zusätzlichen Schaltflächen ausgestattet, die für die UI-Navigation verwendet werden, z. B. die Schaltflächen Ansicht und Menü. Diese Schaltflächen sind nicht Teil der ArcadeStickButtons Enumeration und können nur gelesen werden, indem sie auf den Arcade-Stick als Benutzeroberflächen-Navigationsgerät zugreifen. Weitere Informationen finden Sie unter Benutzeroberflächen-Navigationsgerät.

Die Tastenwerte werden aus der Buttons Eigenschaft der ArcadeStickReading -Struktur gelesen. Da diese Eigenschaft ein Bitfeld ist, wird die bitweise Maskierung verwendet, um den Wert der Schaltfläche zu isolieren, an der Sie interessiert sind. Die Taste wird gedrückt (nach unten), wenn das entsprechende Bit festgelegt ist; andernfalls wird sie freigegeben (nach oben).

Im folgenden Beispiel wird ermittelt, ob die Taste Aktion 1 gedrückt wird.

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

Im folgenden Beispiel wird ermittelt, ob die Taste für Action 1 freigegeben wurde.

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

Manchmal möchten Sie vielleicht bestimmen, wann eine Taste von gedrückter Taste in losgelassen übergeht oder losgelassen wird, ob mehrere Tasten gedrückt oder losgelassen werden, oder ob eine Reihe von Schaltflächen auf eine bestimmte Weise angeordnet sind, einige gedrückt und andere nicht. Informationen zum Erkennen dieser Bedingungen finden Sie unter Erkennen von Schaltflächenübergängen und Erkennen komplexer Tastenanordnungen.

Ausführen des InputInterfacing-Beispiels

Das InputInterfacingUWP-Beispiel (github) veranschaulicht, wie Arcade-Sticks und verschiedene Arten von Eingabegeräten zusammen verwendet werden, und wie sich diese Eingabegeräte als Benutzeroberflächen-Navigationscontroller verhalten.

Siehe auch