Joystick de arcadeArcade stick

Esta página descreve os conceitos básicos de programação para joysticks de arcade do Xbox One usando Windows.Gaming.Input.ArcadeStick e APIs relacionadas para a Plataforma Universal do Windows (UWP).This page describes the basics of programming for Xbox One arcade sticks using Windows.Gaming.Input.ArcadeStick and related APIs for the Universal Windows Platform (UWP).

Ao ler esta página, você saberá como:By reading this page, you'll learn:

  • obter uma lista de joysticks de arcade conectados e seus usuárioshow to gather a list of connected arcade sticks and their users
  • detectar se um joystick de arcade foi adicionado ou removidohow to detect that an arcade stick has been added or removed
  • ler a entrada de um ou mais joysticks de arcadehow to read input from one or more arcade sticks
  • como os pentes de los se comportam como dispositivos de navegaçãohow arcade sticks behave as UI navigation devices

Visão geral do joystick de arcadeArcade stick overview

Os joysticks de arcade são dispositivos de entrada valorizados por reproduzirem a sensação de máquinas de arcade de fliperama e por seus controles digitais de alta precisão.Arcade sticks are input devices valued for reproducing the feel of stand-up arcade machines and for their high-precision digital controls. Os joysticks de arcade são o dispositivo de entrada perfeito para luta "mano a mano" e outros jogos estilo arcade e são adequados para qualquer jogo que funcione bem com controles inteiramente digitais.Arcade sticks are the perfect input device for head-to-head-fighting and other arcade-style games, and are suitable for any game that works well with all-digital controls. Os joysticks de arcade têm suporte em aplicativos UWP do Windows 10 e do Xbox One pelo namespace Windows.Gaming.Input.Arcade sticks are supported in Windows 10 and Xbox One UWP apps by the Windows.Gaming.Input namespace.

O Xbox One barsticks está equipado 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 digital que não dão suporte a controles analógicos ou vibração.Xbox One arcade sticks are equipped with an 8-way digital joystick, six Action buttons (represented as A1-A6 in the image below), and two Special buttons (represented as S1 and S2); they're all-digital input devices that don't support analog controls or vibration. O Xbox One e os pentes também são equipados com botões de exibição e menu usados para dar suporte à navegação na interface do usuário, mas não têm o objetivo de oferecer suporte a comandos de jogos e não podem ser acessados prontamente como botõesXbox One arcade sticks are also equipped with View and Menu buttons used to support UI navigation but they're not intended to support gameplay commands and can't be readily accessed as joystick buttons.

Pente de vôo com joystick 4-direcional, 6 botões de ação (a1-a6) e 2 botões especiais (S1 e S2)

Navegação da interface do usuárioUI navigation

Para aliviar a sobrecarga do suporte para muitos dispositivos de entrada diferentes para a navegação de interface do usuário e para incentivar a consistência entre dispositivos e jogos, os dispositivos de entrada mais físicos atuam simultaneamente como um dispositivo de entrada lógico separado chamado de controlador de navegação da interface do usuário.In order to ease the burden of supporting many different input devices for user interface navigation and to encourage consistency between games and devices, most physical input devices simultaneously act as a separate logical input device called a UI navigation controller. O controlador de navegação da interface do usuário fornece um vocabulário comum para comandos de navegação da interface do usuário em dispositivos de entrada.The UI navigation controller provides a common vocabulary for UI navigation commands across input devices.

Como um controlador de navegação de interface do usuário, os pentes de los mapeiam o conjunto necessário de comandos de navegação para os botões joystick e View, menu, Action 1e Action 2 .As a UI navigation controller, arcade sticks map the required set of navigation commands to the joystick and View, Menu, Action 1, and Action 2 buttons.

Comando NavegaçãoNavigation command Entrada do joystick de arcadeArcade stick input
UpUp Joystick para cimaStick up
DownDown Joystick para baixoStick down
EsquerdaLeft Joystick para a esquerdaStick left
DireitaRight Joystick para a direitaStick right
VisualizarView Botão ExibirView button
MenuMenu Botão MenuMenu button
AceitarAccept Botão de ação 1Action 1 button
CancelarCancel Botão de ação 2Action 2 button

Os joysticks de arcade não mapeiam qualquer um dos comandos de navegação do conjunto opcional.Arcade sticks don't map any of the optional set of navigation commands.

Detectar e rastrear joysticks de arcadeDetect and track arcade sticks

A detecção e o acompanhamento de pentes de los funcionam exatamente da mesma forma que para o gamepads, exceto com a classe ArcadeStick em vez da classe gamepad .Detecting and tracking arcade sticks works in exactly the same way as it does for gamepads, except with the ArcadeStick class instead of the Gamepad class. Consulte Gamepad e vibração para obter mais informações.See Gamepad and vibration for more information.

Lendo o joystick de arcadeReading the arcade stick

Depois de identificar o joystick de arcade de seu interesse, você está pronto para coletar as informações dele.After you identify the arcade stick that you're interested in, you're ready to gather input from it. No entanto, ao contrário de outros tipos de entrada com os quais você possa estar acostumado, os joysticks de arcade não comunicam a alteração de estado acionando eventos.However, unlike some other kinds of input that you might be used to, arcade sticks don't communicate state-change by raising events. Você faz leituras regulares do estado atual deles fazendo uma sondagem.Instead, you take regular readings of their current state by polling them.

Fazendo a sondagem do joystick de arcadePolling the arcade stick

A sondagem captura um instantâneo do joystick de arcade em um momento preciso.Polling captures a snapshot of the arcade stick at a precise point in time. Essa abordagem de coleta de entrada é ótima para a maioria dos jogos, pois sua lógica normalmente é executada em um loop determinante em vez de ser orientada por evento; também é normalmente mais simples interpretar os comandos de jogos da entrada coletada de uma vez do que de várias entradas individuais coletadas ao longo do tempo.This approach to input gathering is a good fit for most games because their logic typically runs in a deterministic loop rather than being event-driven; it's also typically simpler to interpret game commands from input gathered all at once than it is from many single inputs gathered over time.

Para sondar um joystick de arcade, é preciso chamar GetCurrentReading. Essa função retorna um ArcadeStickReading que contém o estado do joystick de arcade.You poll an arcade stick by calling GetCurrentReading; this function returns an ArcadeStickReading that contains the state of the arcade stick.

O exemplo a seguir sonda o estado atual de um joystick de arcade.The following example polls an arcade stick for its current state.

auto arcadestick = myArcadeSticks[0];

ArcadeStickReading reading = arcadestick->GetCurrentReading();

Além do estado do joystick de arcade, cada leitura inclui um carimbo de data e hora que indica precisamente quando o estado foi recuperado.In addition to the arcade stick state, each reading includes a timestamp that indicates precisely when the state was retrieved. O carimbo de data e hora é útil para estabelecer a relação entre o tempo das leituras anteriores e o tempo da simulação do jogo.The timestamp is useful for relating to the timing of previous readings or to the timing of the game simulation.

Lendo os botõesReading the buttons

Cada um dos botões de ar-adesiva — nas 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 (inativo) ou liberado (para cima).Each of the arcade stick buttons—the four directions of the joystick, six Action buttons, and two Special buttons—provides a digital reading that indicates whether it's pressed (down) or released (up). Para eficiência, as leituras de botão não são representadas como valores Boolianos individuais; em vez disso, eles são todos incluídos em um único campo de bits representado pela enumeração ArcadeStickButtons .For efficiency, button readings aren't represented as individual boolean values; instead, they're all packed into a single bitfield that's represented by the ArcadeStickButtons enumeration.

Observação

Os pentes de los são equipados com botões adicionais usados para navegação na interface do usuário, como os botões de exibição e menu .Arcade sticks are equipped with additional buttons used for UI navigation such as the View and Menu buttons. 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 da interface do usuário.These buttons are not a part of the ArcadeStickButtons enumeration and can only be read by accessing the arcade stick as a UI navigation device. Para obter mais informações, consulte Dispositivo de navegação da interface do usuário.For more information, see UI Navigation Device.

Os valores dos botões são lidos na propriedade Buttons da estrutura ArcadeStickReading.The button values are read from the Buttons property of the ArcadeStickReading structure. Como essa propriedade é um campo de bits, o mascaramento bit a bit é usado para isolar o valor do botão de seu interesse.Because this property is a bitfield, bitwise masking is used to isolate the value of the button that you're interested in. O botão está pressionado (para baixo) quando o bit correspondente está definido; caso contrário, ele está liberado (para acima).The button is pressed (down) when the corresponding bit is set; otherwise, it's released (up).

O exemplo a seguir determina se o botão ação 1 é pressionado.The following example determines whether the Action 1 button is pressed.

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

O exemplo a seguir determina se o botão Action 1 é liberado.The following example determines whether the Action 1 button is released.

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

Às vezes, convém determinar quando um botão passa de pressionado para liberado ou vice-versa, se vários botões foram pressionados ou liberados ou se um conjunto de botões está organizado de determinada maneira — alguns pressionados, outros, não.Sometimes you might want to determine when a button transitions from pressed to released or released to pressed, whether multiple buttons are pressed or released, or if a set of buttons are arranged in a particular way—some pressed, some not. Para obter informações sobre como detectar essas condições, consulte Detectando transições do botão e Detectando organizações complexas de botão.For information on how to detect these conditions, see Detecting button transitions and Detecting complex button arrangements.

Executar a amostra InputInterfacingRun the InputInterfacing sample

A amostra InputInterfacingUWP (github) demonstra como usar joysticks de arcade e diferentes tipos de dispositivos de entrada em conjunto e como esses dispositivos de entrada se comportam como controladores de navegação da interface do usuário.The InputInterfacingUWP sample (github) demonstrates how to use arcade sticks and different kinds of input devices in tandem, as well as how these input devices behave as UI navigation controllers.

Veja tambémSee also