Joystick de arcade

Essa página descreve os conceitos básicos de programação para joysticks de arcade do Xbox One usando Windows.Gaming.Input.ArcadeStickarcadestick e APIs relacionadas para a Plataforma Universal do Windows (UWP).

Ao ler esta página, você aprenderá:

  • como reunir uma lista de sticks de arcade conectados e seus usuários
  • como detectar que um stick de arcade foi adicionado ou removido
  • como ler a entrada de uma ou mais sticks de arcade
  • como os joysticks de arcade se comportam como dispositivos de navegação da interface do usuário

Visão geral do stick de arcade

Os sticks de arcade são dispositivos de entrada valorizados por reproduzirem a sensação de máquinas de arcade em pé e por seus controles digitais de alta precisão. Os joysticks de arcade são o dispositivo de entrada perfeito para lutar frente a frente e para outros jogos no estilo arcade, e são adequados para qualquer jogo que funcione bem com controles totalmente digitais. Os joystick de arcade têm suporte nos aplicativos da Plataforma Universal do Windows para Windows 10 ou Windows 11 e no Xbox One, por meio do namespace Windows.Gaming.Input.

Os joysticks de arcade são equipados com um joystick digital de 8 vias, seis botões de Ação (representados como A1-A6 na imagem abaixo) e dois botões Especiais (representados como S1 e S2). Eles são dispositivos de entrada totalmente digitais que não dão suporte a controles analógicos ou vibração. Os joysticks de arcade do Xbox One também são equipados com botões Exibir e Menu usados para dar suporte à navegação na interface do usuário, mas eles não aceitam comandos de jogo e não podem ser prontamente acessados como botões de joystick.

Joystick de arcade com joystick de 4 direções, 6 botões de ação (A1-A6) e 2 botões especiais (S1 e S2)

Navegação na interface do usuário

Para aliviar o fardo de suportar os diferentes dispositivos de entrada para a navegação na interface do usuário e incentivar a consistência entre jogos e dispositivos, a maioria dos dispositivos de entrada físicos atua simultaneamente como um dispositivo de entrada lógico separado chamado controle de navegação na IU. O controle de navegação na interface do usuário fornece um vocabulário comum para comandos de navegação na interface do usuário em dispositivos de entrada.

Como controle de navegação na interface do usuário, o joystick de arcade mapeia o conjunto obrigatório de comandos de navegação para o joystick e os botões Exibir, Menu, Ação 1 e Ação 2.

Comando de navegação Entrada de stick de arcade
Operante Stick em cima
Para baixo Stick para baixo
Esquerda Stick para a esquerda
Right Stick para a direita
Visualizar Botão Exibir
Menu Botão de menu
Aceitar Botão Ação 1
Cancelar Botão Ação 2

Os joystick de arcade não mapeiam nenhum dos conjuntos opcionais de comandos de navegação.

Detectar e rastrear sticks de arcade

Detectar e rastrear sticks de arcade funciona exatamente da mesma maneira que funciona para gamepads, exceto com a classe ArcadeStick em vez da classe Gamepad. Consulte Gamepad e vibração para obter mais informações.

Como ler o stick de arcade

Depois de identificar o joystick de arcade em que você está interessado, você está pronto para coletar informações dele. No entanto, ao contrário de alguns outros tipos de entrada que você pode estar acostumado, os joystick de arcade não comunicam a alteração de estado aumentando os eventos. Em vez disso, você faz leituras regulares de seus estados atuais sondando-os.

Como sondar o stick de arcade

A sondagem captura um instantâneo do joystick de arcade em um ponto preciso no tempo. Essa abordagem para coleta de entrada é uma boa opção para a maioria dos jogos porque sua lógica normalmente é executada em um loop determinístico em vez de ser orientada por eventos. Também é normalmente mais simples interpretar comandos de jogo a partir de entradas coletadas de uma só vez do que de muitas entradas únicas coletadas ao longo do tempo.

Você sonda um stick de arcade chamando GetCurrentReading. Essa função retorna um ArcadeStickReading que contém o estado do stick de arcade.

O exemplo a seguir sonda um joystick de arcade para seu estado atual.

auto arcadestick = myArcadeSticks[0];

ArcadeStickReading reading = arcadestick->GetCurrentReading();

Além do estado do joystick de arcade, cada leitura inclui um carimbo de data/hora que indica precisamente quando o estado foi recuperado. O carimbo de data/hora é útil para se relacionar com o tempo das leituras anteriores ou com o tempo da simulação do jogo.

Como ler os botões

Cada um dos botões do stick de arcade, as quatro direções do joystick, seis botões de Ação e dois botões Especiais, fornece uma leitura digital que indica se ele é pressionado (para baixo) ou liberado (para cima). Para garantir a eficiência, as leituras dos botões não são representadas como valores booleanos individuais. Elas são reunidas em um único campo de bits que é representado pela enumeração ArcadeStickButtons.

Observação

Os sticks de arcade são equipados com botões adicionais usados para navegação na interface do usuário, como os botões Exibir e Menu. Esses botões não fazem parte da enumeração ArcadeStickButtons e só podem ser lidos acessando o joystick de arcade como um dispositivo de navegação na interface do usuário. Para obter mais informações, consulte Dispositivo de navegação na interface do usuário.

Os valores de botão são lidos a partir da propriedade Buttons da estrutura ArcadeStickReading. Como essa propriedade é um campo de bits, o mascaramento bit a bit é usado para isolar o valor do botão no qual você está interessado. O botão é pressionado (para baixo) quando o bit correspondente é definido; caso contrário, é liberado (para cima).

O exemplo a seguir determina se o botão Ação 1 está pressionado.

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

O exemplo a seguir determina se o botão Ação 1 está liberado.

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

Às vezes, você pode querer determinar quando um botão faz a transição de pressionado para liberado ou liberado para pressionado, se vários botões são pressionados ou liberados, ou se um conjunto de botões está organizado de uma maneira específica, alguns pressionados, outros não. Para obter informações sobre como detectar essas condições, consulte Como detectar transições de botão e Como detectando arranjos complexos de botões.

Executar o exemplo InputInterfacing

O aplicativo de exemplo InputInterfacingUWP no GitHub demonstra como usar sticks de arcade e diferentes tipos de dispositivos de entrada em conjunto, bem como esses dispositivos de entrada se comportam como controladores de navegação na interface do usuário.

Confira também