Аркадная палка

На этой странице описаны основы программирования для аркадных палок с помощью Windows.Gaming.Input.ArcadeStick и связанных API-интерфейсов для универсальная платформа Windows (UWP).

Прочитав эту страницу, вы узнаете:

  • как собрать список подключенных аркадных палок и их пользователей
  • как определить, что аркадная палочка была добавлена или удалена
  • чтение входных данных из одной или нескольких аркадных палок
  • как аркадные наклейки ведут себя как устройства навигации пользовательского интерфейса

Обзор аркадной палки

Аркадные наклейки — это устройства ввода, которые ценятся для воспроизведения чувства автономных аркадных машин и для их высокоточных цифровых элементов управления. Аркадные наклейки являются идеальным устройством ввода для головы к голове боевых действий и других аркадных игр, и подходят для любой игры, которая хорошо работает со всеми цифровыми элементами управления. Аркадные наклейки поддерживаются в приложениях UWP для приложений Windows 10 или Windows 11 и Xbox One через пространство имен Windows.Gaming.Input .

Аркадные наклейки оснащены 8-сторонним цифровым джойстиком, шесть кнопок действий (представленные как A1-A6 на изображении ниже) и двумя специальными кнопками (представленными как S1 и S2); они являются все цифровыми устройствами ввода, которые не поддерживают аналоговые элементы управления или вибрации. Аркадные наклейки также оснащены кнопками представления и меню , используемыми для поддержки навигации пользовательского интерфейса, но они не предназначены для поддержки команд игрового процесса и не могут быть легко доступны как кнопки джойстика.

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

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

Чтобы облегчить нагрузку на поддержку множества различных устройств ввода для навигации пользовательского интерфейса и поощрять согласованность между играми и устройствами, большинство физических устройств ввода одновременно выступает в качестве отдельного логического входного устройства, называемого контроллером навигации пользовательского интерфейса. Контроллер навигации пользовательского интерфейса предоставляет общий словарь для команд навигации пользовательского интерфейса на устройствах ввода.

В качестве контроллера навигации пользовательского интерфейса аркадные наклейки сопоставляют необходимый набор команд навигации с кнопками джойстика и представления, меню, действия 1 и действия 2.

Команда навигации Входные данные с аркадной наклейкой
Up Прилипнуть
Down Прилипнуть вниз
Left Палка слева
Right Палка вправо
Представление Кнопка "Просмотреть"
Меню Кнопка меню
Принять Кнопка "Действие 1"
Cancel Кнопка "Действие 2"

Аркадные наклейки не сопоставляют любой из необязательных наборов команд навигации.

Обнаружение и отслеживание аркадных палок

Обнаружение и отслеживание аркадных палок работает точно так же, как и для геймпадов, за исключением класса ArcadeStick вместо класса Gamepad . Дополнительные сведения см. в разделе "Геймпад" и "Вибрация ".

Чтение аркадной палочки

После идентификации аркадной палочки, которую вы хотите, вы готовы собрать входные данные из него. Однако, в отличие от некоторых других типов входных данных, которые вы можете использовать, аркадные наклейки не взаимодействуют с изменением состояния, вызывая события. Вместо этого вы принимаете регулярные чтения их текущего состояния, опросив их.

Опрос аркадного палки

Опрос захватывает моментальный снимок аркадной палочки в точной точке времени. Такой подход к сбору входных данных подходит для большинства игр, так как их логика обычно выполняется в детерминированном цикле, а не на основе событий; Это также, как правило, проще интерпретировать команды игры из входных данных, собранных одновременно, чем из многих отдельных входных данных, собранных с течением времени.

Вы опрашиваете аркадную палку, вызвав GetCurrentReading; эта функция возвращает Аркадный Джойстик, содержащий состояние аркадной палочки.

В следующем примере выполняется опрос аркадного палки для текущего состояния.

auto arcadestick = myArcadeSticks[0];

ArcadeStickReading reading = arcadestick->GetCurrentReading();

В дополнение к состоянию аркадной палочки каждый считывает метку времени, которая указывает точно, когда состояние было извлечено. Метка времени полезна для связи с временем предыдущих чтений или временем имитации игры.

Чтение кнопок

Каждая из аркадных кнопок палки — четыре направления джойстика, шесть кнопок действий и две специальные кнопки — это цифровое чтение, указывающее, нажимается ли оно (вниз) или освобождается (вверх). Для повышения эффективности чтение кнопок не представлено в виде отдельных логических значений; вместо этого они все упакованы в одно битовое поле, представленное перечислением ArcadeStickButtons .

Примечание.

Аркадные наклейки оснащены дополнительными кнопками, используемыми для навигации пользовательского интерфейса, таких как кнопки представления и меню . Эти кнопки не являются частью ArcadeStickButtons перечисления и могут быть прочитаны только путем доступа к аркадной наклейке в качестве устройства навигации пользовательского интерфейса. Дополнительные сведения см. в разделе "Устройство навигации пользовательского интерфейса".

Значения кнопки считываются из Buttons свойства структуры ArcadeStickReading . Так как это свойство представляет собой битовое поле, побитовое маскирование используется для изоляции значения нужной кнопки. Кнопка нажимается (вниз) при установке соответствующего бита; в противном случае она выпущена (вверх).

В следующем примере определяется, нажимается ли кнопка Action 1 .

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

В следующем примере определяется, выпущена ли кнопка Action 1 .

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

Иногда может потребоваться определить, когда кнопка переходит от нажатия на нажатие или освобождено на нажатие, если несколько кнопок нажимаются или освобождаются, или если набор кнопок упорядочивается определенным образом, некоторые нажимаются, а не. Сведения об обнаружении этих условий см. в разделе "Обнаружение переходов кнопок" и "Обнаружение сложных параметров кнопки".

Запуск примера InputInterfacing

Пример InputInterfacingUWP (github) демонстрирует, как использовать аркадные наклейки и различные виды устройств ввода в тандеме, а также как эти устройства ввода работают в качестве контроллеров навигации пользовательского интерфейса.

См. также