Levetta Arcade

Questa pagina descrive le nozioni di base della programmazione per levette Arcade che usano Windows.Gaming.Input.ArcadeStick e le API correlate per la piattaforma UWP (Universal Windows Platform).

Leggendo questa pagina, si apprenderà quanto segue:

  • come raccogliere un elenco di levette Arcade connesse e i relativi utenti
  • come rilevare che una levetta Arcade è stata aggiunta o rimossa
  • come leggere l'input da una o più levette Arcade
  • come conoscere il comportamento delle levette Arcade in quanto dispositivi di spostamento di interfaccia utente

Panoramica delle levette Arcade

Le levette Arcade sono dispositivi di input che riproducono l'esperienza delle classiche macchine da sala giochi e sono apprezzate per i loro controlli digitali di alta precisione. Le levette Arcade sono il dispositivo di input perfetto per i combattimenti head-to-head e altri giochi in stile Arcade, e sono adatte a qualsiasi gioco che funziona con controlli interamente digitali. Le levette Arcade sono supportate nelle app UWP per le app Windows 10 o Windows 11 e Xbox One tramite lo spazio dei nomi Windows.Gaming.Input.

Le levette Arcade sono dotate di joystick digitale a 8 vie, sei pulsanti Azione (rappresentati come A1-A6 nell'immagine sottostante) e due pulsanti Speciali (rappresentati come S1 e S2); sono dispositivi di input digitali che non supportano controlli analogici, né vibrazioni. Le levette Arcade sono dotate inoltre di pulsanti Visualizza e Menu per supportare la navigazione dell'interfaccia utente, ma non sono progettate per supportare i comandi di gioco e non sono facilmente accessibili come pulsanti joystick.

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

Esplorazione dell'interfaccia utente

Al fine di semplificare l'onere di supportare molti dispositivi di input diversi per lo spostamento nell'interfaccia utente e per incoraggiare la coerenza tra giochi e dispositivi, la maggior parte dei dispositivi di input fisici agisce simultaneamente come un dispositivo di input logico separato, chiamato controller di spostamento interfaccia utente. Il controller di spostamento interfaccia utente fornisce un vocabolario comune ai comandi di spostamento interfaccia utente tra i vari dispositivi di input.

In qualità di controller di spostamento interfaccia utente, le levette Arcade eseguono il mapping del necessario set di comandi di spostamento al joystick e ai pulsanti Visualizza, Menu, Azione 1 e Azione 2.

Comando Navigazione Input della levetta Arcade
Freccia SU Levetta su
Giù Levetta giù
Sinistra Levetta a sinistra
Right Levetta a destra
Visualizza Pulsante Visualizza
Menu Pulsante Menu
Accept Pulsante Azione 1
Annulla Pulsante Azione 2

Le levette Arcade non eseguono nessun mapping facoltativo di comandi di spostamento.

Rilevare e tenere traccia delle levette Arcade

Il rilevamento e il tracciamento delle levette Arcade funziona esattamente come per i gamepad, ma con la classe ArcadeStick anziché con la classe Gamepad. Per maggiori informazioni, vedere Gamepad e vibrazione.

Lettura della levetta Arcade

Dopo avere identificato la levetta Arcade, sarà possibile raccoglierne l'input. Tuttavia, a differenza di altri tipi di input più comuni, le levette Arcade non comunicano la modifica dello stato generando eventi. È invece possibile leggere regolarmente lo stato corrente eseguendo il polling.

Polling della levetta Arcade

Il polling acquisisce uno snapshot della levetta Arcade in un momento preciso. Questo approccio alla raccolta di input è ideale con la maggior parte dei giochi essendo la logica eseguita generalmente in un ciclo deterministico anziché essere guidata dagli eventi; è anche più semplice interpretare i comandi del gioco da input raccolti contemporaneamente, anziché raccogliere molti input singoli nel corso del tempo.

Eseguire il polling di una levetta Arcade chiamando GetCurrentReading. Questa funzione restituisce un ArcadeStickReading che contiene lo stato della levetta Arcade.

Nell'esempio seguente viene eseguito il polling di una levetta Arcade per il relativo stato corrente.

auto arcadestick = myArcadeSticks[0];

ArcadeStickReading reading = arcadestick->GetCurrentReading();

Oltre allo stato della levetta Arcade, ogni lettura include un timestamp che indica esattamente quando è stato recuperato lo stato. Il timestamp è utile per la correlazione tra la tempistica delle letture precedenti o la tempistica della simulazione del gioco.

Lettura dei pulsanti

Ognuno dei pulsanti delle levette Arcade (le quattro direzioni del joystick, i sei pulsanti Azione e due pulsanti Speciali) fornisce una lettura digitale che indica se viene premuto (giù) o rilasciato (su). Per una questione di efficienza, le letture dei pulsanti non sono rappresentate come singoli valori booleani, bensì sono tutti compressi in un singolo campo di bit rappresentato dall'enumerazione ArcadeStickButtons.

Nota

Le levette Arcade sono dotate di pulsanti aggiuntivi per lo spostamento nell'interfaccia utente, ad esempio i pulsanti Visualizza e Menu. Questi pulsanti non fanno parte dell'enumerazione ArcadeStickButtons e possono essere letti solo accedendo alla levetta Arcade come dispositivo di spostamento dell'interfaccia utente. Per maggiori informazioni, vedere Dispositivo di navigazione dell'interfaccia.

I valori del pulsante vengono letti dalla proprietà Buttons della struttura ArcadeStickReading. Poiché questa proprietà è un campo di bit, viene usata la maschera bit per bit per isolare il valore del pulsante a cui si è interessati. Il pulsante viene premuto (giù) quando viene impostato il bit corrispondente; in caso contrario, viene rilasciato (su).

Nell'esempio seguente viene determinato se viene premuto il pulsante Azione 1.

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

Nell'esempio seguente viene determinato se viene rilasciato il pulsante Azione 1.

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

Talvolta si potrebbe voler determinare se un pulsante passa da premuto a rilasciato o da rilasciato a premuto, se più pulsanti vengono premuti o rilasciati o se un set di pulsanti è disposto in un modo particolare (alcuni premuti, altri no). Per informazioni su come rilevare queste condizioni, vedere Rilevamento delle transizioni dei pulsanti e Rilevamento di disposizioni complesse dei pulsanti.

Eseguire l'esempio InputInterfacing

L'esempio InputInterfacingUWP in GitHub illustra come usare le levette Arcade e diversi tipi di dispositivi di input in parallelo, e mostra che questi dispositivi di input si comportano come controller di spostamento interfaccia utente.

Vedi anche