Аркадный джойстикArcade stick

На этой странице приведены основные принципы программирования для аркадных джойстиков Xbox One с помощью [Windows.Gaming.Input.ArcadeStick][аркадный джойстик] и связанных API-интерфейсов для универсальной платформы 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).

Изучив информацию на этой странице, вы узнаете:By reading this page, you'll learn:

  • как составить список подключенных аркадных джойстиков и их пользователей;how to gather a list of connected arcade sticks and their users
  • как определить, что аркадный джойстик был добавлен или удален;how to detect that an arcade stick has been added or removed
  • как считывать входные данные с одного или нескольких аркадных джойстиков;how to read input from one or more arcade sticks
  • как аркадныеные устройства работают в качестве устройств навигации в пользовательском интерфейсеhow arcade sticks behave as UI navigation devices

Обзор аркадного джойстикаArcade stick overview

Аркадные джойстики — это устройства ввода, позволяющие передать ощущение игры на стационарном игровом автомате и обладающие высокоточными цифровыми элементами управления.Arcade sticks are input devices valued for reproducing the feel of stand-up arcade machines and for their high-precision digital controls. Аркадные джойстики являются идеальным устройством ввода для файтингов и других аркадных игр, а также подходят для любой игры, в которой используются полностью цифровые элементы управления.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. Поддержка аркадных джойстиков в приложениях UWP для Windows 10 и Xbox One реализована с помощью пространства имен Windows.Gaming.Input.Arcade sticks are supported in Windows 10 and Xbox One UWP apps by the Windows.Gaming.Input namespace.

Xbox One аркадные поддерживает 8-сторонний цифровой джойстик, шесть кнопок действий (представленных как a1-A6 на изображении ниже) и две Специальные кнопки (представленные как S1 и S2). Это все цифровые устройства ввода, которые не поддерживают аналоговые элементы управления или вибрации.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. Устройства Xbox One аркадные также оснащены кнопками просмотра и меню , которые используются для поддержки навигации по пользовательскому интерфейсу, но не предназначены для поддержки команд игрового процесса и не могут быть доступны в виде кнопок джойстика.Xbox 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.

Аркадные с 4-направленным джойстиком, 6 кнопками действий (a1 – A6) и 2 специальными кнопками (S1 и S2)

Навигация в пользовательском интерфейсеUI navigation

Чтобы облегчить задачу обеспечения поддержки множества разных устройств ввода для навигации по пользовательскому интерфейсу и сохранить единообразие используемых для этого элементов управления в разных играх и на разных устройствах, большинство физических устройств ввода параллельно выполняют функцию отдельного логического устройства ввода под названием контроллер навигации по пользовательскому интерфейсу.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. Контроллер навигации в пользовательском интерфейсе предоставляет стандартный набор элементов управления для команд навигации в пользовательском интерфейсе на разных устройствах ввода.The UI navigation controller provides a common vocabulary for UI navigation commands across input devices.

Как контроллер навигации пользовательского интерфейса, аркадныеные устройства сопоставляют требуемый набор команд навигации с кнопками " вид", " меню", " действие 1" и " действие 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.

Команды навигацииNavigation command Действие аркадного джойстикаArcade stick input
UpUp Джойстик вверхStick up
DownDown Джойстик внизStick down
ЛевыйLeft Джойстик влевоStick left
ПравыйRight Джойстик вправоStick right
ПредставлениеView Кнопка просмотраView button
МенюMenu Кнопка менюMenu button
ПринятьAccept Кнопка действия 1Action 1 button
ОтменитьCancel Кнопка действия 2Action 2 button

Аркадные джойстики не поддерживают какие-либо дополнительные наборы команд навигации.Arcade sticks don't map any of the optional set of navigation commands.

Обнаружение и отслеживание аркадных джойстиковDetect and track arcade sticks

Обнаружение и отслеживание устройств аркадные работает точно так же, как и для игровых планшетов, за исключением класса [аркадестикк][] , а не класса игровой планшет .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. Подробнее см. в статье Геймпад и вибрация.See Gamepad and vibration for more information.

Чтение аркадных джойстиковReading the arcade stick

После выбора аркадного джойстика, с которым вы хотите работать, можно приступить к сбору данных, вводимых с его помощью.After you identify the arcade stick that you're interested in, you're ready to gather input from it. Тем не менее, в отличие от некоторых других типов вводимых данных, с которыми вы, возможно, уже знакомы, аркадные джойстики не передают данные об изменении состояния путем создания событий.However, unlike some other kinds of input that you might be used to, arcade sticks don't communicate state-change by raising events. Вместо этого для получения стандартной информации об их текущем состоянии вы проводите опрос.Instead, you take regular readings of their current state by polling them.

Опрос аркадного джойстикаPolling the arcade stick

В ходе опроса сохраняется моментальный снимок аркадного джойстика в конкретный момент времени.Polling captures a snapshot of the arcade stick at a precise point in time. Такой подход к сбору входных данных отлично подходит для большинства игр, потому что их логика, как правило, выполняется в детерминированном цикле и не зависит от событий; кроме того, проще интерпретировать игровые команды из входных данных, собранных в один момент, чем из многочисленных единичных входных данных, собранных за определенный период.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.

Опрос аркадного джойстика выполняется путем вызова функции GetCurrentReading, которая возвращает структуру ArcadeStickReading, содержащую состояние аркадного джойстика.You poll an arcade stick by calling GetCurrentReading; this function returns an ArcadeStickReading that contains the state of the arcade stick.

В следующем примере кода выполняется опрос аркадного джойстика на предмет его текущего состояния.The following example polls an arcade stick for its current state.

auto arcadestick = myArcadeSticks[0];

ArcadeStickReading reading = arcadestick->GetCurrentReading();

Помимо состояния аркадного джойстика считанные данные содержат метку времени, указывающую точное время извлечения сведений о состоянии.In addition to the arcade stick state, each reading includes a timestamp that indicates precisely when the state was retrieved. Метку времени удобно использовать для обращения ко времени предыдущего события считывания данных или ко времени моделирования конкретного игрового момента.The timestamp is useful for relating to the timing of previous readings or to the timing of the game simulation.

Чтение кнопокReading the buttons

Каждая из кнопок аркадные — содержит четыре направления джойстика, шесть кнопок действий и две Специальные кнопки, — которые показывают, что она нажата (вниз) или освобождена (вверх).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). Для повышения эффективности считывания кнопок не представляется как отдельные логические значения. Вместо этого все они упаковываются в одно битовое поле, представленное перечислением [аркадестиккбуттонс][] .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.

Примечание

Аркадныеные устройства оснащены дополнительными кнопками, используемыми для навигации по пользовательскому интерфейсу, например представления и кнопок меню .Arcade sticks are equipped with additional buttons used for UI navigation such as the View and Menu buttons. Эти кнопки не являются частью перечисления ArcadeStickButtons, и данные с них можно считать только при доступе к аркадному джойстику как к устройству навигации по пользовательскому интерфейсу.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. Дополнительные сведения см. в разделе Устройство навигации по пользовательскому интерфейсу.For more information, see UI Navigation Device.

Значения кнопок считываются из свойства Buttons структуры ArcadeStickReading.The button values are read from the Buttons property of the ArcadeStickReading structure. Так как это свойство представляет собой битовое поле, для изоляции значения кнопки, сведения о которой вам интересны, используется побитовая маскировка.Because this property is a bitfield, bitwise masking is used to isolate the value of the button that you're interested in. Кнопка нажата (вниз), когда установлен соответствующий бит; в противном случае кнопка отпущена (вверх).The button is pressed (down) when the corresponding bit is set; otherwise, it's released (up).

В следующем примере определяется, нажата ли кнопка действия 1 .The following example determines whether the Action 1 button is pressed.

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

В следующем примере определяется, отпущена ли кнопка действия 1 .The following example determines whether the Action 1 button is released.

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

Иногда нужно определить, когда кнопка переходит из нажатого состояния в отпущенное или наоборот, узнать состояние сразу нескольких кнопок (нажаты или отпущены) либо определить особую схему расположения кнопок в наборе — некоторые кнопки могут быть нажаты, а другие отпущены.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. Сведения о том, как определить эти условия, см. в разделах Определение положений кнопки и Определение сложных схем положений кнопок.For information on how to detect these conditions, see Detecting button transitions and Detecting complex button arrangements.

Запуск примера кода InputInterfacingRun the InputInterfacing sample

В примере кода InputInterfacingUWP (в центре GitHub) показано, как использовать аркадные джойстики и различные типы устройств ввода вместе, а также представлено, как эти устройства ввода работают в качестве контроллеров навигации по пользовательскому интерфейсу.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.

См. также разделSee also