Аркадная палка
На этой странице описаны основы программирования для аркадных палок с помощью Windows.Gaming.Input.ArcadeStick и связанных API-интерфейсов для универсальная платформа Windows (UWP).
Прочитав эту страницу, вы узнаете:
- как собрать список подключенных аркадных палок и их пользователей
- как определить, что аркадная палочка была добавлена или удалена
- чтение входных данных из одной или нескольких аркадных палок
- как аркадные наклейки ведут себя как устройства навигации пользовательского интерфейса
Аркадные наклейки — это устройства ввода, которые ценятся для воспроизведения чувства автономных аркадных машин и для их высокоточных цифровых элементов управления. Аркадные наклейки являются идеальным устройством ввода для головы к голове боевых действий и других аркадных игр, и подходят для любой игры, которая хорошо работает со всеми цифровыми элементами управления. Аркадные наклейки поддерживаются в приложениях UWP для приложений Windows 10 или Windows 11 и Xbox One через пространство имен Windows.Gaming.Input .
Аркадные наклейки оснащены 8-сторонним цифровым джойстиком, шесть кнопок действий (представленные как A1-A6 на изображении ниже) и двумя специальными кнопками (представленными как S1 и S2); они являются все цифровыми устройствами ввода, которые не поддерживают аналоговые элементы управления или вибрации. Аркадные наклейки также оснащены кнопками представления и меню , используемыми для поддержки навигации пользовательского интерфейса, но они не предназначены для поддержки команд игрового процесса и не могут быть легко доступны как кнопки джойстика.
Чтобы облегчить нагрузку на поддержку множества различных устройств ввода для навигации пользовательского интерфейса и поощрять согласованность между играми и устройствами, большинство физических устройств ввода одновременно выступает в качестве отдельного логического входного устройства, называемого контроллером навигации пользовательского интерфейса. Контроллер навигации пользовательского интерфейса предоставляет общий словарь для команд навигации пользовательского интерфейса на устройствах ввода.
В качестве контроллера навигации пользовательского интерфейса аркадные наклейки сопоставляют необходимый набор команд навигации с кнопками джойстика и представления, меню, действия 1 и действия 2.
Команда навигации | Входные данные с аркадной наклейкой |
---|---|
Up | Торчать |
Down | Прилипнуть вниз |
Left | Палка слева |
Right | Палка вправо |
Представления | Кнопка "Просмотреть" |
Меню | Кнопка меню |
Accept | Кнопка "Действие 1" |
Отменить | Кнопка "Действие 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)
}
Иногда может потребоваться определить, когда кнопка переходит от нажатия на нажатие или освобождено на нажатие, если несколько кнопок нажимаются или освобождаются, или если набор кнопок упорядочивается определенным образом, некоторые нажимаются, а не. Сведения об обнаружении этих условий см. в разделе "Обнаружение переходов кнопок" и "Обнаружение сложных параметров кнопки".
Пример InputInterfacingUWP (github) демонстрирует, как использовать аркадные наклейки и различные виды устройств ввода в тандеме, а также как эти устройства ввода работают в качестве контроллеров навигации пользовательского интерфейса.