- Как правильно использовать китайский джойстик в среде Windows 10
- Как проверить вибрацию на джойстике PC
- Что потребуется для проверки вибрации
- Способы проверки вибрации на джойстике PC
- Геймпад и вибрация Gamepad and vibration
- Обзор геймпадов Gamepad overview
- Триггеры вибрации и импульсов Vibration and impulse triggers
- Мертвые зоны аналоговых стиков Thumbstick deadzones
- Навигация в пользовательском интерфейсе UI navigation
- Обнаружение и отслеживание геймпадов Detect and track gamepads
- Список геймпадов The gamepads list
- Добавление и удаление геймпадов Adding and removing gamepads
- Пользователи и гарнитуры Users and headsets
- Считывание данных с геймпада Reading the gamepad
- Опрос геймпада Polling the gamepad
- Считывание данных с аналоговых стиков Reading the thumbsticks
- Считывание данных с триггеров Reading the triggers
- Чтение кнопок Reading the buttons
- Пример чтения данных, вводимых с геймпада Run the gamepad input sample
- Обзор вибрации и импульсных триггеров Vibration and impulse triggers overview
- Использование вибрации и импульсов Using vibration and impulse
- Использование вибромоторов Using the vibration motors
- Использование импульсных триггеров Using the impulse triggers
- Пример вибрации геймпада Run the gamepad vibration sample
Как правильно использовать китайский джойстик в среде Windows 10
Однажды, в очередной раз запуская AS3 захотелось ощутить немного комфорта: разлечься на стуле, взять в руки контроллер и комфортно поиграть. Для этой задачи удачно нашелся геймпад от Genius модели MaxFire G-12U Vibration, который я приобрел более пяти лет назад за 150 гривен. Он до сих пор работает. Но сразу же возникла проблема, а именно – работа правого стика в современных играх. Если крутить в право-влево, то камера в игре поднимается-опускается, а если вверх-вниз, то вообще никакой реакции. Было пройдено много игр на нем и таких проблем не было. Что ж, я уже не мог отказать себе в отдыхе и начал искать решение.
Предполагая, что проблема связана с драйвером, решил для начала их обновить, но любое ПО с интернета и его родного диска (пришлось еще поискать куда его вставить) не помогло. В свою очередь в эмуляторе PSCX2 все работает прекрасно, значит проблема не аппаратная, уже хорошо.
Поиск проблемы в интернете не принес никаких плодов для размышления. Решение пришло, когда наткнулся на эмулятор геймпада xbox 360 в Windows – X360CE. В программе есть визуальный интерфейс работы и «бинда» кнопок, в нем была таже проблема при автонастройке. Спустя некоторое время, я попробовал указать вручную направление стика. Все заработало, произошел вау эффект, и я залпом прошел игру.
Позже решил обновить программу до последней версии, причиной стал третий Ведьмак (которому было пофигу) и ее универсальность. Универсальность заключалось в том, что теперь не нужно было оставлять копию программы в каталоге игры, которая создавала файлы конфигурации ввода для геймпада и их же использовала, как это было в древней же версии, которую я использовал изначально. Что это за программка и в чем ценность ее «универсальности» расскажу ниже.
Установка и настройка X360CE
Для начала необходимо установить последнюю версию драйвера для вашего девайса.
Скачиваем последнюю версию X360CE с его GitHub репозитория (поговаривают, что на официальном сайте давно нечего не обновляли). У меня это версия 4.13.11.0.
Распаковываем ее в удобном месте и всегда запускаем от имени администратора. При первом запуске эмулятор запросит установку драйвера эмуляции – устанавливаем.
Подключаем джойстик, если вы этого еще не сделали. Далее переходим во вкладку Controller 1. Нажимаем кнопку Add в верхнем правом углу и выбираем ваше устройство кнопкой Add Selected Device.
Уже можно задавать кнопки, но пока рано. Замаскируем ваш джойстик в системе. Переходим во вкладку Options, далее Virtual Device и устанавливаем HID Guardian. Система как обычно может запросить перезагрузку, но у меня и без нее все было нормально.
Далее во вкладке Devices находим свое устройство и напротив него устанавливаем галочку Hide.
Таким образом мы прячем свой геймпад из системы, но его нажатия обрабатываются в эмулированном контроллере xbox 360. Чтобы убедится в этом, переходим в вкладку Controller 1 и нажимаем кнопку Game Controllers (внизу слева) и видим мой новый вау эффект.
Пришла пора разобраться с кнопками. Тыкаем выпадающие списки вокруг картинки геймпада, выбираем Record, центральная картинка контроллера покажет зеленым кружком чего сейчас «биндим». Отдельно, направления крестовины и стиков можно не задавать, достаточно X и Y направлений, а случаи крестовины просто ее выбрать в D-pad. После настройки кнопок, не забываем сохранится кнопкой Save all в верхнем право углу программы.
Убедимся, что все работает – открываем Game Controllers, Свойства контроллера. Проверяем все ли нажимается, крутится, вертится.
Отлично, система видит заточенный под нее джойстик. Теперь можно тестировать в играх, прикладываю скриншоты доказательства работы эмуляции в современных играх от разных студий.
Собственно, вот сам виновник торжества. Все работает.
В Ведьмаке, который заточенный только под контроллер xbox тоже работает.
И на закуску – пятые свитки.
Выше были описаны минимальные настройки для всей системы. Делать детальное ревью не вижу смысла. Скажу только, что каждый ваш геймпад можно тонко настроить, если посидеть в программе больше пяти минут. Также если потребуется, то возможны индивидуальные настройки для каждой игры, которые можно произвести во вкладке Games. Просто добавляем ее главный исполняемый exe файл, выбираем его в эмуляторе и производим правки.
По поводу производительности. Разработчик советует свернуть эмулятор, перед запуском игры. В таком состоянии, он использует минимальное количество ресурсов системы.
Таким образом я решил не только свою проблему с геймпадом, но и нашел способ, как сэкономить деньги на покупке джойстика xbox для своего ноутбука. Но это все же не панацея, слишком багов может всплыть, а если изучить официальный репозиторий и вовсе страшно становится.
Проблемы и возможные решения
Я не нашел в программе сброс всех настроек. Нашел решение на гитхабе. Нужно удалить папку, где эмулятор хранит свои настройки. Она находится в корне системного тома, в папке ProgramData под названием X360CE. Таким же способом можно сделать бекап настроек.
Когда впервые пытался настраивать новую версию программы, все работало, но в игре не работала ни одна кнопка. Оказывается, надо было вычистить старую версию программы из папки игры.
Забейте на ярко красное количество ошибок в правом нижнем углу, они имеют место быть, если уж совсем все плохо.
Вибрацию настроить на новой версии не удалось. При попытке ее включить, программа вылетает. Проблема с двайверами, которые были обновлены последний раз для Висты.
Как проверить вибрацию на джойстике PC
Геймпад считается очень удобным для игр, поскольку у джойстика есть вибрация и аналоговые стыки. Но в работе этой функции часто возникают неполадки и ее необходимо проверять.
Что потребуется для проверки вибрации
Для проверки понадобятся две вещи:
Они нужны только для установки драйверов.
Способы проверки вибрации на джойстике PC
Проверяется вибрация следующим образом:
- Запускаем игру, которая может работать с геймпадом.
- Заходим в опции и проверяем, включен ли режим вибрации. Проходим несколько уровней в игре.
- В стандартных случаях функция появляется при взрывах, ударах, уроне, показах видеороликов или движении транспорта по обочине. Но если на протяжении получаса игры она не появляется, устройство работает неправильно.
- Нам нужно искать кнопку Vibration, расположенную на лицевой панели рядом с Mode. Если нажать на эту клавишу, геймпад вибрирует, что сообщает о работоспособности устройства. Помните, нажав на эту кнопку, мы включаем или выключаем обратную связь, и вибрации появляются в обоих случаях (длятся около 2-х секунд).
- Необходимо установить драйвера. Они должны быть на загрузочном диске. Если их нет, скачиваем с интернета. В составе приложения должны быть программы с файлами реестра и калибровкой и отладкой устройства. В некоторых устройствах присутствуют программы, которые позволяют проверять калибровку геймпада. Например, нажав на комбинацию кнопок, появляются различные звуки вместе с функцией вибрации. Если последние присутствуют, устройство работает нормально.
- Теперь нужно проверить совместимость этой игры и джойстика. Приборы бывают новые и устаревшие. Внешних отличий нет, отличается алгоритм их работы. На старых играх проблем не возникает, но современные требуют новые устройства, которые способны создавать необходимые функции. Возможно, джойстик исправен, но он просто устарел. Здесь поможет только покупка нового устройства.
Если на джойстике пропала функция, проблема может касаться драйверов. Попробуйте их обновить. Если это не помогло, купите более современное оборудование.
Геймпад и вибрация Gamepad and vibration
На этой странице приведены основные принципы программирования для геймпадов Xbox One с помощью [Windows.Gaming.Input.Gamepad][геймпад] и связанных API-интерфейсов для универсальной платформы Windows (UWP). This page describes the basics of programming for Xbox One gamepads using Windows.Gaming.Input.Gamepad and related APIs for the Universal Windows Platform (UWP).
Изучив информацию на этой странице, вы узнаете: By reading this page, you’ll learn:
- как составить список подключенных геймпадов и их пользователей; how to gather a list of connected gamepads and their users
- как определить, что геймпад был добавлен или удален; how to detect that a gamepad has been added or removed
- как считывать входные данные с одного или нескольких геймпадов; how to read input from one or more gamepads
- как отправлять команды вибрации и импульсов; how to send vibration and impulse commands
- поведение игровых планшетов в качестве устройств навигации в пользовательском интерфейсе how gamepads behave as UI navigation devices
Обзор геймпадов Gamepad overview
Такие геймпады, как беспроводной геймпад Xbox и беспроводной геймпад Xbox серии S являются игровыми устройствами ввода общего назначения. Gamepads like the Xbox Wireless Controller and Xbox Wireless Controller S are general-purpose gaming input devices. Это стандартные устройства ввода для Xbox One, которое игроки часто используют в среде Windows, если им неудобно играть с помощью клавиатуры и мыши. They’re the standard input device on Xbox One and a common choice for Windows gamers when they don’t favor a keyboard and mouse. Поддержка геймпадов в приложениях UWP для Windows 10 и Xbox реализована с помощью пространства имен Windows.Gaming.Input. Gamepads are supported in Windows 10 and Xbox UWP apps by the Windows.Gaming.Input namespace.
В Xbox один игровой планшет оснащен направленной панелью (или D-Pad); Кнопки A, B, X, Y, представленияи меню ; Left и right сумбстиккс, амортизаторы и триггеры; и всего четыре мотора вибрации. Xbox One gamepads are equipped with a directional pad (or D-pad); A, B, X, Y, View, and Menu buttons; left and right thumbsticks, bumpers, and triggers; and a total of four vibration motors. Оба аналоговых стика обеспечивают двойное считывание аналоговых данных по осям X и Y, а также выступают как кнопки при нажатии вниз. Both thumbsticks provide dual analog readings in the X and Y axes, and also act as a button when pressed inward. Каждый триггер обеспечивает аналоговый режим чтения, который показывает, насколько далеко он извлекается обратно. Each trigger provides an analog reading that represents how far it’s pulled back.
[!NOTE] > The Xbox Elite Wireless Controller is equipped with four additional **Paddle** buttons on its underside. These can be used to provide redundant access to game commands that are difficult to use together (such as the right thumbstick together with any of the **A**, **B**, **X**, or **Y** buttons) or to provide dedicated access to additional commands. —>
Windows.Gaming.Input.Gamepad также поддерживает игровые планшеты Xbox 360, имеющие тот же макет элемента управления, что и стандартные игровые панели Xbox. Windows.Gaming.Input.Gamepad also supports Xbox 360 gamepads, which have the same control layout as standard Xbox One gamepads.
Триггеры вибрации и импульсов Vibration and impulse triggers
Геймпады Xbox One оснащены двумя отдельными моторами, обеспечивающими сильную и слабую вибрацию геймпада, а также двумя специальными моторами для резкой вибрации для каждого триггера (благодаря этой уникальной функции триггеры геймпадов Xbox One называются импульсными триггерами). Xbox One gamepads provide two independent motors for strong and subtle gamepad vibration as well as two dedicated motors for providing sharp vibration to each trigger (this unique feature is the reason that Xbox One gamepad triggers are referred to as impulse triggers).
Игровые планшеты Xbox 360 не снабжены триггерами с импульсами. Xbox 360 gamepads are not equipped with impulse triggers.
Мертвые зоны аналоговых стиков Thumbstick deadzones
Аналоговый стик в состоянии покоя в центральном положении в идеале каждый раз должен давать одинаковые нейтральные значения по осям X и Y. A thumbstick at rest in the center position would ideally produce the same, neutral reading in the X and Y axes every time. Однако из-за механических воздействий и чувствительности стика фактические значения в центральном положении только приблизительно соответствуют идеальным нейтральным значениям и могут различаться между разными считываниями. However, due to mechanical forces and the sensitivity of the thumbstick, actual readings in the center position only approximate the ideal neutral value and can vary between subsequent readings. По этой причине необходимо всегда использовать небольшой деадзоне — диапазон значений рядом с идеальным положением в центре, который игнорируется, — чтобы компенсировать различия в производстве, механическое износ или другие проблемы с игровым планшетом. For this reason, you must always use a small deadzone—a range of values near the ideal center position that are ignored—to compensate for manufacturing differences, mechanical wear, or other gamepad issues.
Чем больше мертвая зона, тем проще отличить преднамеренный ввод от непреднамеренного ввода. Larger deadzones offer a simple strategy for separating intentional input from unintentional input.
Дополнительные сведения см. в разделе Считывание значений аналогового стика. For more information, see Reading the thumbsticks.
Навигация в пользовательском интерфейсе UI navigation
Чтобы облегчить задачу обеспечения поддержки разных устройств ввода для навигации в пользовательском интерфейсе и сохранить единообразие используемых для этого элементов управления в разных играх и на разных устройствах, большинство физических устройств ввода параллельно выполняют функцию отдельного логического устройства ввода под названием контроллер навигации в пользовательском интерфейсе. In order to ease the burden of supporting the 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.
Как контроллер навигации пользовательского интерфейса, игровые устройства сопоставляют необходимый набор команд навигации с кнопками левого стика, D-Pad, представлений, меню, aи B . As a UI navigation controller, gamepads map the required set of navigation commands to the left thumbstick, D-pad, View, Menu, A, and B buttons.
Команды навигации Navigation command | Ввод с геймпада Gamepad input |
---|---|
Up Up | Левый аналоговый стик вверх / D-клавиша вверх Left thumbstick up / D-pad up |
Down Down | Левый аналоговый стик вниз/D-клавиша вниз Left thumbstick down / D-pad down |
Левый Left | Левый аналоговый стик влево/D-клавиша влево Left thumbstick left / D-pad left |
Правый Right | Левый аналоговый стик вправо/D-клавиша вправо Left thumbstick right / D-pad right |
Представление View | Кнопка просмотра View button |
Меню Menu | Кнопка меню Menu button |
Принять Accept | Кнопка A A button |
Отменить Cancel | Кнопка B B button |
Кроме того, геймпады поддерживают все дополнительные наборы команд навигации для остальных входных данных. Additionally, gamepads map all of the optional set of navigation commands to the remaining inputs.
Команды навигации Navigation command | Ввод с геймпада Gamepad input |
---|---|
PAGE UP Page Up | Левый триггер Left trigger |
PAGE DOWN Page Down | Правый триггер Right trigger |
PAGE LEFT Page Left | Левый бампер Left bumper |
PAGE RIGHT Page Right | Правый бампер Right bumper |
Прокрутка вверх Scroll Up | Правый аналоговый стик вверх Right thumbstick up |
Прокрутка вниз Scroll Down | Правый аналоговый стик вниз Right thumbstick down |
Прокрутка влево Scroll Left | Правый аналоговый стик влево Right thumbstick left |
Прокрутить вправо Scroll Right | Правый аналоговый стик вправо Right thumbstick right |
Контекстный вызов 1 Context 1 | Кнопка X X Button |
Контекстный вызов 2 Context 2 | Кнопка Y Y Button |
Контекстный вызов 3 Context 3 | Нажатие левого аналогового стика Left thumbstick press |
Контекстный вызов 4 Context 4 | Нажатие правого аналогового стика Right thumbstick press |
Обнаружение и отслеживание геймпадов Detect and track gamepads
Геймпадами управляет система, поэтому их не требуется создавать или инициализировать. Gamepads are managed by the system, therefore you don’t have to create or initialize them. Система предоставляет список подключенных геймпадов и событий и уведомляет о добавлении или удалении геймпада. The system provides a list of connected gamepads and events to notify you when a gamepad is added or removed.
Список геймпадов The gamepads list
Класс Gamepad имеет статическое свойство Gamepads — доступный только для чтения список подключенных геймпадов. The Gamepad class provides a static property, Gamepads, which is a read-only list of gamepads that are currently connected. Так как вы можете заинтересовать только некоторые из подключенных игровых планшетов, рекомендуется поддерживать собственную коллекцию вместо доступа к ним через Gamepads свойство. Because you might only be interested in some of the connected gamepads, it’s recommended that you maintain your own collection instead of accessing them through the Gamepads property.
В следующем примере кода выполняется копирование всех подключенных геймпадов в новую коллекцию. The following example copies all connected gamepads into a new collection. Обратите внимание, что, поскольку другие потоки в фоновом режиме будут обращаться к этой коллекции (в событиях [гамепададдед][] и [гамепадремовед][] ), необходимо поместить блокировку для любого кода, который считывает или обновляет коллекцию. Note that because other threads in the background will be accessing this collection (in the GamepadAdded and GamepadRemoved events), you need to place a lock around any code that reads or updates the collection.
Добавление и удаление геймпадов Adding and removing gamepads
При добавлении или удалении игрового планшета создаются события [гамепададдед][] и [гамепадремовед][] . When a gamepad is added or removed, the GamepadAdded and GamepadRemoved events are raised. Можно зарегистрировать обработчики для этих событий, чтобы отслеживать подключенные в данный момент геймпады. You can register handlers for these events to keep track of the gamepads that are currently connected.
Следующий пример кода запускает отслеживание добавленного геймпада. The following example starts tracking a gamepad that’s been added.
В следующем примере останавливается отслеживание удаленных планшетов. The following example stops tracking a gamepad that’s been removed. Кроме того, необходимо будет решить, что происходит с игровыми планшетами, которые вы отслеживаете при их удалении. Например, этот код отслеживает ввод только с одного игрового планшета и просто устанавливает его в nullptr момент удаления. You’ll also need to handle what happens to the gamepads that you’re tracking when they’re removed; for example, this code only tracks input from one gamepad, and simply sets it to nullptr when it’s removed. Необходимо проверить каждый кадр, если игровой планшет активен, и обновить игровой планшет, с которого вы собираете данные, когда контроллеры подключены и отключены. You’ll need to check every frame if your gamepad is active, and update which gamepad you’re gathering input from when controllers are connected and disconnected.
Дополнительные сведения см. в статье рекомендации по вводу для игр . See Input practices for games for more information.
Пользователи и гарнитуры Users and headsets
Каждый геймпад можно связать с учетной записью пользователя, чтобы соотнести его личность с игровым процессом. Также к геймпаду можно подключить гарнитуру для использования голосового чата или других внутриигровых возможностей. Each gamepad can be associated with a user account to link their identity to their gameplay, and can have a headset attached to facilitate voice chat or in-game features. Подробные сведения о работе с пользователями и гарнитурами см. в статьях Отслеживание пользователей и их устройств и Гарнитура. To learn more about working with users and headsets, see Tracking users and their devices and Headset.
Считывание данных с геймпада Reading the gamepad
После выбора необходимого геймпада можно приступить к сбору данных, вводимых с его помощью. After you identify the gamepad 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, gamepads don’t communicate state-change by raising events. Вместо этого для получения стандартной информации об их текущем состоянии вы проводите опрос. Instead, you take regular readings of their current state by polling them.
Опрос геймпада Polling the gamepad
Опроса сохраняется моментальный снимок устройства навигации в конкретный момент времени. Polling captures a snapshot of the navigation device 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, которая возвращает структуру GamepadReading, содержащую состояние геймпада. You poll a gamepad by calling GetCurrentReading; this function returns a GamepadReading that contains the state of the gamepad.
В следующем примере кода выполняется опрос геймпада на предмет его текущего состояния. The following example polls a gamepad for its current state.
Помимо состояния геймпада, считанные данные содержат метку времени, указывающую точное время получения сведений о состоянии. In addition to the gamepad 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 thumbsticks
Каждый стик позволяет считывать с него аналоговые данные в диапазоне от -1,0 до +1,0 по осям X и Y. Each thumbstick provides an analog reading between -1.0 and +1.0 in the X and Y axes. На оси X значение -1,0 соответствует крайнему левому положению стика, значение +1,0 — крайнему правому. In the X axis, a value of -1.0 corresponds to the left-most thumbstick position; a value of +1.0 corresponds to right-most position. На оси Y значение -1,0 соответствует крайнему нижнему положению стика, а значение +1,0 — крайнему верхнему. In the Y axis, a value of -1.0 corresponds to the bottom-most thumbstick position; a value of +1.0 corresponds to the top-most position. В обеих осях значение равно примерно 0,0, когда закрепление находится в Центральной должности, но оно является нормальным для того, чтобы точное значение изменяться даже между последующими считываниями. стратегии по устранению этого варианта обсуждаются далее в этом разделе. In both axes, the value is approximately 0.0 when the stick is in the center position, but it’s normal for the precise value to vary, even between subsequent readings; strategies for mitigating this variation are discussed later in this section.
Значение для оси X левого аналогового стика считывается из свойства LeftThumbstickX структуры GamepadReading, а значение для оси Y — из свойства LeftThumbstickY . The value of the left thumbstick’s X axis is read from the LeftThumbstickX property of the GamepadReading structure; the value of the Y axis is read from the LeftThumbstickY property. Значение для оси X правого аналогового стика считывается из свойства RightThumbstickX структуры, а значение для оси Y — из свойства RightThumbstickY . The value of the right thumbstick’s X axis is read from the RightThumbstickX property; the value of the Y axis is read from the RightThumbstickY property.
При считывании значений аналогового стика можно заметить, что когда манипулятор находится в состоянии покоя в центральном положении, значения могут быть не равны 0,0. Вместо этого вы будете получать различные значения, близкие к 0,0, каждый раз, когда манипулятор перемещается и возвращается в центральное положение. When reading the thumbstick values, you’ll notice that they don’t reliably produce a neutral reading of 0.0 when the thumbstick is at rest in the center position; instead, they’ll produce different values near 0.0 each time the thumbstick is moved and returned to the center position. Для устранения данной проблемы можно установить небольшую мертвую зону — диапазон значений рядом с идеальным центральным положением, которые будут игнорироваться. To mitigate these variations, you can implement a small deadzone, which is a range of values near the ideal center position that are ignored. Один из способов создания мертвой зоны — определить, насколько далеко от центра сдвинулся стик, и игнорировать смещения на расстояние, которое окажется меньше выбранного вами. One way to implement a deadzone is to determine how far from center the thumbstick has moved, and ignoring the readings that are nearer than some distance you choose. Вы можете вычислить расстояние по- — неточному, так как считывание с помощью аналогового стика фактически является полярными, а не плоскими значениями — с использованием теорему теорема. You can compute the distance roughly—it’s not exact because thumbstick readings are essentially polar, not planar, values—just by using the Pythagorean theorem. В результате вы получите радиальную мертвую зону. This produces a radial deadzone.
В следующем примере кода показан расчет базовой радиальной мертвой зоны с помощью теоремы Пифагора. The following example demonstrates a basic radial deadzone using the Pythagorean theorem.
Каждый аналоговый стик также действует как кнопка при нажатии вниз. Дополнительные сведения о чтении этих входных данных см. в разделе Считывание данных с кнопок. Each thumbstick also acts as a button when pressed inward; for more information on reading this input, see Reading the buttons.
Считывание данных с триггеров Reading the triggers
Триггеры представлены в виде значений с плавающей запятой в диапазоне от 0,0 (полностью отпущены) до 1,0 (полностью нажаты). The triggers are represented as floating-point values between 0.0 (fully released) and 1.0 (fully depressed). Значение левого триггера считывается из свойства LeftTrigger структуры GamepadReading, а значение правого триггера — из свойства RightTrigger . The value of the left trigger is read from the LeftTrigger property of the GamepadReading structure; the value of the right trigger is read from the RightTrigger property.
Чтение кнопок Reading the buttons
Каждая кнопка на игровом планшете — содержит четыре направления полевых и правых амортизаторов, левый и правый аналоговый стик, A, B, X, Y, Просмотри меню — предоставляют цифровое чтение, которое показывает, что он нажат (вниз) или освобожден (вверх). Each of the gamepad buttons—the four directions of the D-pad, left and right bumpers, left and right thumbstick press, A, B, X, Y, View, and Menu—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 GamepadButtons enumeration.
[!NOTE] > The Xbox Elite Wireless Controller is equipped with four additional **paddle** buttons on its underside. These buttons are also represented in the `GamepadButtons` enumeration and their values are read in the same way as the standard gamepad buttons. —>
Значения кнопок считываются из свойства Buttons структуры GamepadReading. The button values are read from the Buttons property of the GamepadReading 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).
Следующий пример кода определяет, нажата ли кнопка A. The following example determines whether the A button is pressed.
Следующий пример кода определяет, отпущена ли кнопка A. The following example determines whether the A button is released.
Иногда может потребоваться определить, когда кнопка переводится в режим «отжата» или «отпущена», нажимается или отпускается несколько кнопок, или если набор кнопок упорядочивается по какой-либо некоторой — нажатой, а не наоборот. 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 is arranged in a particular way—some pressed, some not. Сведения о том, как определить каждое из этих условий, см. в разделах Определение положений кнопки и Определение сложных схем положений кнопок. For information on how to detect each of these conditions, see Detecting button transitions and Detecting complex button arrangements.
Пример чтения данных, вводимых с геймпада Run the gamepad input sample
Пример GamepadUWP sample (github) показывает, как подключиться к геймпаду и считать его состояние. The GamepadUWP sample (github) demonstrates how to connect to a gamepad and read its state.
Обзор вибрации и импульсных триггеров Vibration and impulse triggers overview
Вибромоторы внутри геймпада предназначены для предоставления пользователю тактильной обратной связи. The vibration motors inside a gamepad are for providing tactile feedback to the user. В играх эта возможность используется для усиления эффекта погружения, для передачи информации о состоянии (например, получение повреждений), для предупреждения о приближении к важным объектам и в иных целях. Games use this ability to create a greater sense of immersion, to help communicate status information (such as taking damage), to signal proximity to important objects, or for other creative uses.
Геймпады Xbox One оснащены четырьмя независимыми вибромоторами. Xbox One gamepads are equipped with a total of four independent vibration motors. Два — это крупные моторы, расположенные в теле игрового планшета; левый мотор обеспечивает грубую вибрации с высокой степенью амплитуды, в то время как правый двигатель обеспечивает жентлер, более тонкую вибрации. Two are large motors located in the gamepad body; the left motor provides rough, high-amplitude vibration, while the right motor provides gentler, more subtle vibration. Два других маленьких мотора располагаются в каждом триггере. Они обеспечивают резкую вибрацию, воспринимаемую пальцами пользователя на триггере. Благодаря этой уникальной функции триггеры геймпадов Xbox One называются импульсными триггерами. The other two are small motors, one inside each trigger, that provide sharp bursts of vibration directly to the user’s trigger fingers; this unique ability of the Xbox One gamepad is the reason its triggers are referred to as impulse triggers. Управляя этими моторами, можно создавать широкий спектр тактильных ощущений. By orchestrating these motors together, a wide range of tactile sensations can be produced.
Использование вибрации и импульсов Using vibration and impulse
Вибрация геймпада управляется с помощью свойства Vibration класса Gamepad. Gamepad vibration is controlled through the Vibration property of the Gamepad class. Vibration является экземпляром структуры [гамепадвибратион][] , которая состоит из четырех значений с плавающей запятой; Каждое значение представляет собой интенсивность одного из моторов. Vibration is an instance of the GamepadVibration structure which is made up of four floating point values; each value represents the intensity of one of the motors.
Несмотря на то, Gamepad.Vibration что члены свойства могут быть изменены напрямую, рекомендуется инициализировать отдельный экземпляр с нужными GamepadVibration значениями, а затем скопировать его в Gamepad.Vibration свойство, чтобы изменить фактический мотор интенситиес все одновременно. Although the members of the Gamepad.Vibration property can be modified directly, it’s recommended that you initialize a separate GamepadVibration instance to the values you want, and then copy it into the Gamepad.Vibration property to change the actual motor intensities all at once.
В следующем примере показано, как одновременно изменить интенсивность работы всех моторов. The following example demonstrates how to change the motor intensities all at once.
Использование вибромоторов Using the vibration motors
Левый и правый вибромоторы получают значения с плавающей запятой от 0,0 (без вибрации) до 1,0 (наиболее сильная вибрация). The left and right vibration motors take floating point values between 0.0 (no vibration) and 1.0 (most intense vibration). Интенсивность работы левого мотора задается с помощью свойства LeftMotor структуры GamepadVibration, а интенсивность работы правого мотора — с помощью свойства RightMotor . The intensity of the left motor is set by the LeftMotor property of the GamepadVibration structure; the intensity of the right motor is set by the RightMotor property.
В следующем примере задается интенсивность работы обоих вибромоторов и активируется вибрация геймпада. The following example sets the intensity of both vibration motors and activates gamepad vibration.
Помните, что эти два мотора не идентичны, и установка одинаковых значений для этих свойств не приведет к возникновению одинакового уровня вибрации в этих моторах. Remember that these two motors are not identical so setting these properties to the same value doesn’t produce the same vibration in one motor as in the other. Для любого значения левый мотор создает более высокий уровень вибрации с меньшей частотой, чем правый мотор, который — для одного и того же значения — создает жентлерную вибрации с более высокой частотой. For any value, the left motor produces a stronger vibration at a lower frequency than the right motor which—for the same value—produces a gentler vibration at a higher frequency. Даже при максимальных значениях левый мотор не сможет обеспечить такую же высокую частоту вибрации, как правый, а правый — не сможет обеспечить такую же сильную вибрацию, как левый. Even at the maximum value, the left motor can’t produce the high frequencies of the right motor, nor can the right motor produce the high forces of the left motor. При этом, так как моторы жестко прикреплены к корпусу геймпада, игроки не воспринимают вибрацию как идущую от двух разных источников, несмотря на то, что моторы имеют различные характеристики и вибрируют с разной интенсивностью. Still, because the motors are rigidly connected by the gamepad body, players don’t experience the vibrations fully independently even though the motors have different characteristics and can vibrate with different intensities. Это позволяет получить более широкий диапазон ощущений, чем в случае использования одинаковых моторов. This arrangement allows for a wider, more expressive range of sensations to be produced than if the motors were identical.
Использование импульсных триггеров Using the impulse triggers
Мотор каждого импульсного триггера получает значение с плавающей запятой от 0,0 (без вибрации) до 1,0 (наиболее сильная вибрация). Each impulse trigger motor takes a floating point value between 0.0 (no vibration) and 1.0 (most intense vibration). Интенсивность мотора левого триггера задается с помощью свойства LeftTrigger структуры GamepadVibration, интенсивность мотора правого триггера — с помощью свойства RightTrigger . The intensity of the left trigger motor is set by the LeftTrigger property of the GamepadVibration structure; the intensity of the right trigger is set by the RightTrigger property.
В следующем примере задается интенсивность обоих импульсных триггеров и выполняется их активация. The following example sets intensity of both impulse triggers and activates them.
В отличие от первых двух моторов, эти два вибромотора внутри триггеров идентичны друг другу, и установка одинаковых значений приведет к одинаковой вибрации этих моторов. Unlike the others, the two vibration motors inside the triggers are identical so they produce the same vibration in either motor for the same value. Однако, так как эти моторы не имеют жесткого сцепления друг с другом, игроки чувствуют их вибрацию независимо. However, because these motors are not rigidly connected in any way, players experience the vibrations independently. Это позволяет одновременно создавать с помощью обоих триггеров полностью независимые ощущения и помогает им передавать более подробную информацию, чем та информация, которую передают моторы в корпусе геймпада. This arrangement allows for fully independent sensations to be directed to both triggers simultaneously, and helps them to convey more specific information than the motors in the gamepad body can.
Пример вибрации геймпада Run the gamepad vibration sample
Пример GamepadVibrationUWP sample (github) показывает, как вибромоторы и импульсные триггеры геймпада создают различные эффекты. The GamepadVibrationUWP sample (github) demonstrates how the gamepad vibration motors and impulse triggers are used to produce a variety of effects.