Перейти к содержимому

Как проверить вибрацию на геймпаде

  • автор:

Нет вибрации на геймпаде в играх на ПК. Как включить?

Top-Fun.ru Top-Fun.ru

Проблема неработающей вибрации в ПК-играх часто встречается как на оригинальных геймпадах для Xbox и PS, так и на их дешевых аналогах. И если у первых чаще всего достаточно просто включить эту функцию в игре (или эмуляторе), то с их «китайскими» братьями бывает всё не так однозначно. Проблема может скрываться не только в игре (отсутствие поддержки вибрации в ней), но и в программном обеспечении ПК. Далее мы расскажем, какие есть способы решения этой неприятности.

Настройка уровня вибрации устройства в Windows 10

После первого подключения вашего геймпада к компьютеру для него автоматически должны были установиться драйвера. Если этого не произошло, то вам необходимо вручную найти в интернете пакет драйверов конкретно для вашей модели. Если ваш геймпад от известной фирмы (Logitech, Nacon, DEXP, SVEN, MSI и т.д.), то проблем с поиском драйверов точно не возникнет.

Если даже после установки драйверов вибрация не появилась, то убедитесь, что её уровень не установлен на ноль. Чтобы проверить и изменить это, откройте следующее:

Панель управления – Устройства и принтерыПКМ по значку ГеймпадаПараметры игровых устройств управленияСвойства.

Далее перейдите на вкладку регулировки вибрации и установите ползунок в нужное вам положение.

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

Включение вибрации в играх через Steam

С давних времен Steam известен своей плохой работой с геймпадами. Даже при использовании оригинального геймпада от Xbox вы не сможете воспользоваться всеми его функциями. Например, вы не сможете ощутить вибрацию курков (кнопок L2/R2) в играх – фирменную фишку последних версий геймпадов от Microsoft.

Однако полное отсутствие вибрации на геймпаде в играх Steam-версии всё же можно исправить. Для этого в клиенте Steam перейдите в ВидРежим Big Picture. Откроется специальный режим, в котором откройте Настройки (значок шестеренки) – откройте Настройки геймпада (может определиться как Контроллер Xbox 360). Убедитесь, что Настройки вибрации находятся в положении Вкл.

Если вибрация включена, но в играх её всё равно нет, то проделайте следующее:

В клиенте Steam перейдите в раздел Библиотека, нажмите ПКМ по названию интересующей вас игры и откройте Свойства. Во вкладке Контроллер в «Исключение для *» выберите пункт Отключить систему ввода Steam.

После этого перезапустите свою игру (если она была запущена) и убедитесь в том, что вибрация появилась. Если этого не произошло, то попробуйте воспользоваться следующим способом.

Использование эмуляторов геймпада Xbox и PlayStation

Если вышеописанные способы не помогли включить вибрацию на устройстве, то стоит попробовать воспользоваться эмуляторами оригинальных геймпадов Microsoft и Sony. Даже в случае использования оригинальных Dualshock и Dualsense вам придется использовать эмуляторы, так как у них нет официальной поддержки в системе Windows.

x360CE – эмулятор геймпада Xbox 360

Для аналогов геймпадов Xbox есть программа под названием x360 Controller Emulator (x360ce). С её помощью вы сможете заставить ваш ПК (и игры соответственно) распознавать даже откровенное «ноунейм» устройство как оригинальный геймпад Xbox 360. В ней вы сможете настроить множество параметров геймпада. Вибрация настраивается во вкладке Force Feedback путем установки галочки напротив Enable Force Feedback.

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

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

DS4Windows – эмулятор геймпада Dualshock

Для аналогов геймпада Dualshock (PlayStation 4) существует программа DS4Windows. Так как у геймпадов фирмы Sony нет официальной поддержки Windows, то данная программа является обязательной к установке для игр на ПК, даже если вы используете оригинальное японское устройство, не говоря уже о его дешевых репликах со всем известной китайской торговой площадки.

Если после установки DS4Windows (и сопутствующих ей драйверов) вибрация в играх не появилась, то в программе перейдите на вкладку Settings – уберите галочку с Hide DS4 Controller.

Затем перейдите в Profiles – выберите профиль в списке и нажмите Edit – откройте вкладку Other, в разделе Virtual Controller Settings выберите Dualshock 4.

В разделе Rumble напротив Enable Output data to DS4 установите галочку. После этого вибрация должна заработать (может потребоваться переподключение геймпада к ПК и перезапуск игры).

Подключение через USB-провод

Если ваш геймпад подключен к ПК через Bluetooth или отдельный адаптер, то попробуйте подключить его через USB. Если через провод вибрация появилась, значит проблему нужно искать исключительно в беспроводном соединении.

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

Проверка работоспособности геймпада онлайн

Начать сегодняшнюю подборку хотим с достаточно простого, но функционального сервиса проверки под названием Gamepad Tester, доступном по ссылке далее.

Внимание! В браузерах не на движке Chromium (Mozilla Firefox, Internet Explorer и старые версии Microsoft Edge) ресурс отображается не совсем корректно, поэтому для полноценного использования именно этого сервиса желательно задействовать Google Chrome!

  1. Подключите целевой геймпад к компьютеру (кабелем или по беспроводному протоколу), после чего открывайте ресурс средства тестирования.
  2. После загрузки страницы вверху сайта появится блок с распознанным идентификатором геймпада и показателями работоспособности его элементов. Обозначения следующие:
    • «Index» – количество подключённых и распознанных системой геймпадов (нумерация начинается с 0);
    • «Connected» – состояние подключения;
    • «Mapping» – поддержка устройством переназначения элементов;
    • «Timestamp» – время отклика;
    • «Pose» – индикатор передачи кодов по протоколу COM, используется для старых геймпадов и джойстиков;
    • «HapticActuators» – указывает на наличие дополнительных элементов обратной связи, на данный момент реализовано только в DualSense;
    • «Hand» и «DisplayID» – эти функции не доделаны, поэтому на их показатели можно не обращать внимания;
    • «Vibration» – показывает наличие виброотдачи, работает не всегда корректно;
    • индикаторы с именем «B*цифра*» – обозначают распознанные кнопки;
    • индикаторы «Axis*цифра*» – обозначают аналоговые стики, курки и крестовину (поддержка гироскопов ограничена и в большинстве случаев не отображается корректно).

    как проверить джойстик онлайн-1

  3. Для проверки по очереди нажимайте на кнопки и курки, крутите стики: реакцией на корректное срабатывание будет подсвечивание соответствующей ему позиции (кнопки) или изменение выделенного элемента на индикаторе (стики и курки). Также в правой части страницы расположен визуализатор нажатий, который показывает, какие элементы нажаты либо сдвинуты. Для гаджетов с обратной связью (вибрацией) можно дополнительно проверить и её: кликните по ссылке «Test Vibration», и если функция работает нормально, геймпад провибрирует около 1 секунды. К сожалению, визуализация этой возможности отсутствует. как проверить джойстик онлайн-10
  4. Самой ценной функцией сервиса Gamepad Tester является диагностика калибровки стиков, то есть отображение того, насколько она соответствует геометрическому кругу. Для её использования отметьте опцию «Test Circularity» и, следуя инструкции, медленно проверните и правый, и левый грибки вокруг своей оси.

Примечание. Для большей точности рекомендуется сделать 3-4 оборота.

как проверить джойстик онлайн-3После этого выше отмеченной опции появятся индикаторы со значением погрешности. Идеально откалиброванных стиков не существует, поэтому не пугайтесь, если результат получится в пределах 10% – для нормально работающих фирменных геймпадов такое является нормой. Для устройств от брендов второго эшелона это значение может достигать 25%, а признаком неисправности будут показатели, которые превышают это число. как проверить джойстик онлайн-4

Способ 2: HTML5 Gamepad Test

Чуть более простой вариант сервиса для проверки геймпадов, также использующий средства Gamepad API.

  1. Как и в случае с предыдущим решением, запустите браузер (желательно Гугл Хром), подключите целевой геймпад к компьютеру и перейдите по предложенной выше ссылке.
  2. После загрузки страницы нажмите на любую кнопку на проверяемом устройстве или сдвиньте стик – запустится интерфейс проверки. По принципу работы он схож с встроенной утилитой диагностики геймпадов в Windows: слева отображаются кружки, обозначающие аналоговые переключатели, а справа – ряд кнопок, которые были распознаны как отдельные на вашем девайсе. Из дополнительной информации отображается только определённое сервисом имя устройства, состояние его подключения и доступная раскладка (строки «connected» и «mapping» соответственно). как проверить джойстик онлайн-5
  3. Непосредственно тестирование ничем не отличается от такового во встроенном в Виндовс решении: крутите стики для наблюдения за реакцией соответствующего индикатора и нажимайте на кнопки – зарегистрированное нажатие подсвечивает кружок красным. как проверить джойстик онлайн-6

Способ 3: Тест геймпада онлайн

Альтернативой предыдущему решению является сервис Тест геймпада онлайн, доступный на ресурсе arendahames.ru.

  1. Последовательность действий для начала работы с оснасткой та же, что и для других решений: подключите геймпад к компьютеру, затем перейдите к ресурсу. Если девайс не был распознан автоматически, попробуйте понажимать кнопки на нём или обновить страницу.
  2. После определения появится интерфейс проверки, подобный упомянутому выше HTML5 Gamepad Test: позиции «Axis» соответствуют аналоговым стикам, «B» – кнопкам. как проверить джойстик онлайн-7
  3. Алгоритм проверки тоже похож на упомянутый ранее сервис: нажимайте на кнопки – зарегистрированные нажатия подсвечивают соответствующую позицию, равно как и смещение стика в любую сторону. Увы, но и здесь проверить дополнительные функции не получится. как проверить джойстик онлайн-8

Геймпад и вибрация

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

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

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

Обзор геймпадов

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

Геймпады Xbox One оснащены боковой площадкой (или D-pad); Кнопки A, B, X, Y, View и Menu; слева и справа от пальца, бамперов и триггеров; и в общей сложности четыре двигателя вибрации. Оба отпечатка обеспечивают двойное аналоговое чтение в осях X и Y, а также выступает в качестве кнопки при нажатии внутрь. Каждый триггер предоставляет аналоговое чтение, представляющее, насколько далеко оно оттягивается.

[!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 One.

Вибрация и импульсные триггеры

Геймпады Xbox One предоставляют два независимых двигателя для сильных и тонких вибраций геймпадов, а также двух выделенных двигателей для обеспечения резкой вибрации для каждого триггера (эта уникальная функция является причиной того, что триггеры геймпада Xbox One называются триггерами импульса).

Геймпады Xbox 360 не оснащены триггерами импульса.

Дополнительные сведения см. в обзоре триггеров вибрации и импульса.

Мертвая зона отпечатка

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

Более крупные взаимоблокировки предлагают простую стратегию разделения намеренного ввода от непреднамеренных входных данных.

Дополнительные сведения см. в статье «Чтение отпечатков».

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

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

В качестве контроллера навигации пользовательского интерфейса геймпады сопоставляют необходимый набор команд навигации с левой кнопкой мыши, D-pad, View, Menu, A и B .

Команда навигации Входные данные геймпада
Up Левый палец вверх / D-pad up
Down Левый палец вниз / D-pad down
Left Левый палец слева / D-pad слева
Right Левый палец справа / D-pad right
Представление Кнопка «Просмотреть»
Меню Кнопка меню
Принять Кнопка
Cancel Кнопка B

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

Команда навигации Входные данные геймпада
Page Up Левый триггер
Page Down Правый триггер
Страница слева Левый бампер
Страница справа Правый бампер
Прокрутка вверх Правый палец вверх
Прокрутите вниз Правый палец вниз
Прокрутка влево Правый палец слева
Прокрутка вправо Правый палец справа
Контекст 1 Кнопка X
Контекст 2 Кнопка Y
Контекст 3 Нажатие левого отпечатка
Контекст 4 Нажатие правого отпечатка

Обнаружение и отслеживание геймпадов

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

Список геймпадов

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

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

auto myGamepads = ref new Vector(); critical_section myLock<>; for (auto gamepad : Gamepad::Gamepads) < // Check if the gamepad is already in myGamepads; if it isn't, add it. critical_section::scoped_lock lock< myLock >; auto it = std::find(begin(myGamepads), end(myGamepads), gamepad); if (it == end(myGamepads)) < // This code assumes that you're interested in all gamepads. myGamepads->Append(gamepad); > > 
private readonly object myLock = new object(); private List myGamepads = new List(); private Gamepad mainGamepad; private void GetGamepads() < lock (myLock) < foreach (var gamepad in Gamepad.Gamepads) < // Check if the gamepad is already in myGamepads; if it isn't, add it. bool gamepadInList = myGamepads.Contains(gamepad); if (!gamepadInList) < // This code assumes that you're interested in all gamepads. myGamepads.Add(gamepad); >> > > 

Добавление и удаление геймпадов

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

В следующем примере начинается отслеживание добавленной игровой панели.

Gamepad::GamepadAdded += ref new EventHandler(Platform::Object^, Gamepad^ args) < // Check if the just-added gamepad is already in myGamepads; if it isn't, add // it. critical_section::scoped_lock lock< myLock >; auto it = std::find(begin(myGamepads), end(myGamepads), args); if (it == end(myGamepads)) < // This code assumes that you're interested in all new gamepads. myGamepads->Append(args); > > 
Gamepad.GamepadAdded += (object sender, Gamepad e) => < // Check if the just-added gamepad is already in myGamepads; if it isn't, add // it. lock (myLock) < bool gamepadInList = myGamepads.Contains(e); if (!gamepadInList) < myGamepads.Add(e); >> >; 

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

Gamepad::GamepadRemoved += ref new EventHandler(Platform::Object^, Gamepad^ args) < unsigned int indexRemoved; critical_section::scoped_lock lock< myLock >; if(myGamepads->IndexOf(args, &indexRemoved)) < if (m_gamepad == myGamepads->GetAt(indexRemoved)) < m_gamepad = nullptr; >myGamepads->RemoveAt(indexRemoved); > > 
Gamepad.GamepadRemoved += (object sender, Gamepad e) => < lock (myLock) < int indexRemoved = myGamepads.IndexOf(e); if (indexRemoved >-1) < if (mainGamepad == myGamepads[indexRemoved]) < mainGamepad = null; >myGamepads.RemoveAt(indexRemoved); > > >; 

Пользователи и гарнитуры

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

Чтение геймпадов

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

Опрос геймпада

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

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

auto gamepad = myGamepads[0]; GamepadReading reading = gamepad->GetCurrentReading(); 
Gamepad gamepad = myGamepads[0]; GamepadReading reading = gamepad.GetCurrentReading(); 

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

Чтение отпечатков

Каждый палец обеспечивает аналоговое чтение между -1,0 и +1,0 в осях X и Y. В оси X значение -1,0 соответствует левой позиции отпечатка; Значение +1.0 соответствует правой позиции. В оси Y значение -1,0 соответствует нижней позиции наибольшего отпечатка; Значение +1.0 соответствует верхней позиции. В обоих осях значение составляет примерно 0,0, если палка находится в центре, но это нормально для точного значения, даже между последующими считываниями; Стратегии устранения этого варианта рассматриваются далее в этом разделе.

Значение оси X левого отпечатка считывается из LeftThumbstickX свойства структуры GamepadReading; значение оси Y считывается из LeftThumbstickY свойства. Значение оси X правого отпечатка считывается из RightThumbstickX свойства. Значение оси Y считывается из RightThumbstickY свойства.

float leftStickX = reading.LeftThumbstickX; // returns a value between -1.0 and +1.0 float leftStickY = reading.LeftThumbstickY; // returns a value between -1.0 and +1.0 float rightStickX = reading.RightThumbstickX; // returns a value between -1.0 and +1.0 float rightStickY = reading.RightThumbstickY; // returns a value between -1.0 and +1.0 
double leftStickX = reading.LeftThumbstickX; // returns a value between -1.0 and +1.0 double leftStickY = reading.LeftThumbstickY; // returns a value between -1.0 and +1.0 double rightStickX = reading.RightThumbstickX; // returns a value between -1.0 and +1.0 double rightStickY = reading.RightThumbstickY; // returns a value between -1.0 and +1.0 

При чтении значений отпечатка вы заметите, что они не надежно создают нейтральное чтение 0,0, когда палец находится в неактивном положении в центре; Вместо этого они будут создавать разные значения около 0,0 каждый раз, когда отпечаток перемещается и возвращается в положение центра. Чтобы устранить эти варианты, можно реализовать небольшую мертвую зону, которая представляет собой диапазон значений вблизи идеального центрального положения, которые игнорируются. Один из способов реализации мертвой зоны заключается в том, чтобы определить, насколько далеко от центра двигался палец, и игнорировать чтения, которые ближе, чем какое-то расстояние, которое вы выбираете. Вы можете вычислить расстояние примерно — это не точно, потому что считывания отпечатков по сути полярные, а не планарные, значения — просто с помощью теоремы Pythagorean. Это создает радиальную мертвую зону.

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

float leftStickX = reading.LeftThumbstickX; // returns a value between -1.0 and +1.0 float leftStickY = reading.LeftThumbstickY; // returns a value between -1.0 and +1.0 // choose a deadzone -- readings inside this radius are ignored. const float deadzoneRadius = 0.1; const float deadzoneSquared = deadzoneRadius * deadzoneRadius; // Pythagorean theorem -- for a right triangle, hypotenuse^2 = (opposite side)^2 + (adjacent side)^2 auto oppositeSquared = leftStickY * leftStickY; auto adjacentSquared = leftStickX * leftStickX; // accept and process input if true; otherwise, reject and ignore it. if ((oppositeSquared + adjacentSquared) > deadzoneSquared) < // input accepted, process it >
double leftStickX = reading.LeftThumbstickX; // returns a value between -1.0 and +1.0 double leftStickY = reading.LeftThumbstickY; // returns a value between -1.0 and +1.0 // choose a deadzone -- readings inside this radius are ignored. const double deadzoneRadius = 0.1; const double deadzoneSquared = deadzoneRadius * deadzoneRadius; // Pythagorean theorem -- for a right triangle, hypotenuse^2 = (opposite side)^2 + (adjacent side)^2 double oppositeSquared = leftStickY * leftStickY; double adjacentSquared = leftStickX * leftStickX; // accept and process input if true; otherwise, reject and ignore it. if ((oppositeSquared + adjacentSquared) > deadzoneSquared) < // input accepted, process it >

Каждый палец также действует как кнопка при нажатии внутрь; Дополнительные сведения о чтении этих входных данных см. в разделе «Чтение кнопок».

Чтение триггеров

Триггеры представлены в виде значений с плавающей запятой от 0,0 (полностью выпущено) до 1.0 (полностью подавлено). Значение левого триггера считывается из LeftTrigger свойства структуры GamepadReading; значение правого триггера считывается из RightTrigger свойства.

float leftTrigger = reading.LeftTrigger; // returns a value between 0.0 and 1.0 float rightTrigger = reading.RightTrigger; // returns a value between 0.0 and 1.0 
double leftTrigger = reading.LeftTrigger; // returns a value between 0.0 and 1.0 double rightTrigger = reading.RightTrigger; // returns a value between 0.0 and 1.0 

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

Каждая из кнопок геймпада — четыре направления D-pad, левых и правых бамперов, клавиши A, B, X , Y, View и Menu— это цифровое чтение, указывающее, нажимается ли оно (вниз) или освобождается (вверх). Для повышения эффективности чтение кнопок не представлено в виде отдельных логических значений; вместо этого они все упакованы в одно битовое поле, представленное перечислением GamepadButtons .

[!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 . Так как это свойство представляет собой битовое поле, побитовое маскирование используется для изоляции значения нужной кнопки. Кнопка нажимается (вниз) при установке соответствующего бита; в противном случае она выпущена (вверх).

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

if (GamepadButtons::A == (reading.Buttons & GamepadButtons::A)) < // button A is pressed >
if (GamepadButtons.A == (reading.Buttons & GamepadButtons.A)) < // button A is pressed >

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

if (GamepadButtons::None == (reading.Buttons & GamepadButtons::A)) < // button A is released >
if (GamepadButtons.None == (reading.Buttons & GamepadButtons.A)) < // button A is released >

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

Запуск примера ввода геймпадов

Пример GamepadUWP (github) демонстрирует, как подключиться к геймпаду и прочитать его состояние.

Обзор триггеров вибрации и импульса

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

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

Использование вибрации и импульса

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

Хотя элементы Gamepad.Vibration свойства можно изменить напрямую, рекомендуется инициализировать отдельный GamepadVibration экземпляр в нужные значения, а затем скопировать его в Gamepad.Vibration свойство, чтобы изменить фактические интенсивность двигателя одновременно.

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

// get the first gamepad Gamepad^ gamepad = Gamepad::Gamepads->GetAt(0); // create an instance of GamepadVibration GamepadVibration vibration; // . set vibration levels on vibration struct here // copy the GamepadVibration struct to the gamepad gamepad.Vibration = vibration; 
// get the first gamepad Gamepad gamepad = Gamepad.Gamepads[0]; // create an instance of GamepadVibration GamepadVibration vibration = new GamepadVibration(); // . set vibration levels on vibration struct here // copy the GamepadVibration struct to the gamepad gamepad.Vibration = vibration; 

Использование вибрационных двигателей

Слева и правые вибрационные моторы принимают значения с плавающей запятой между 0,0 (без вибрации) и 1,0 (наиболее интенсивные вибрации). Интенсивность левого двигателя задается свойством структуры GamepadVibration; интенсивность правого двигателя задается LeftMotor свойством RightMotor .

В следующем примере устанавливается интенсивность как двигателей вибрации, так и активируется вибрация геймпада.

GamepadVibration vibration; vibration.LeftMotor = 0.80; // sets the intensity of the left motor to 80% vibration.RightMotor = 0.25; // sets the intensity of the right motor to 25% gamepad.Vibration = vibration; 
GamepadVibration vibration = new GamepadVibration(); vibration.LeftMotor = 0.80; // sets the intensity of the left motor to 80% vibration.RightMotor = 0.25; // sets the intensity of the right motor to 25% mainGamepad.Vibration = vibration; 

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

Использование триггеров импульса

Каждый двигатель триггера импульса принимает значение с плавающей запятой от 0,0 (без вибрации) до 1,0 (наиболее интенсивные вибрации). Интенсивность левого триггера задается свойством структуры GamepadVibration. Интенсивность правого триггера задается LeftTrigger свойством RightTrigger .

Следующий пример задает интенсивность обоих триггеров импульса и активирует их.

GamepadVibration vibration; vibration.LeftTrigger = 0.75; // sets the intensity of the left trigger to 75% vibration.RightTrigger = 0.50; // sets the intensity of the right trigger to 50% gamepad.Vibration = vibration; 
GamepadVibration vibration = new GamepadVibration(); vibration.LeftTrigger = 0.75; // sets the intensity of the left trigger to 75% vibration.RightTrigger = 0.50; // sets the intensity of the right trigger to 50% mainGamepad.Vibration = vibration; 

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

Запуск образца вибрации геймпада

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

См. также

  • Windows.Gaming.Input.UINavigationController
  • Windows.Gaming.Input.IGameController
  • Методы ввода для игр

Как отключить вибрацию на геймпаде Xbox Series или Xbox One

Как отключить вибрацию на геймпаде Xbox Series или Xbox One

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

Что нужно знать о вибрации геймпада на Xbox

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

Обратите внимание

Когда в геймпаде Xbox совсем мало остается энергии, он автоматически выключает вибрацию, что дает возможность проработать контроллеру дополнительно несколько десятков минут.

Как отключить вибрацию геймпада на Xbox Series или Xbox One

Обратите внимание
Игровые геймпады от Xbox One совместимы с консолями Xbox Series X и Xbox Series S.

Чтобы отключить вибрацию геймпада на игровой приставке Xbox Series X, Xbox Series S или Xbox One, необходимо:

  1. Нажать на геймпаде на белую кнопку Xbox, чтобы открылось боковое меню.Как отключить вибрацию геймпада на Xbox - шаг 1
  2. Переключитесь с помощью кнопки RB до раздела с профилем и выберите пункт “Параметры”. Нажмите A, чтобы войти в него.Как отключить вибрацию геймпада на Xbox - шаг 2
  3. Пролистайте список настроек вниз до пункта “Специальные возможности”. И зайдите в раздел “Геймпад”.Как отключить вибрацию геймпада на Xbox - шаг 3
  4. Перейдите в раздел “Настройки вибрации”.Как отключить вибрацию геймпада на Xbox - шаг 4

Обратите внимание

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

  1. Может потребоваться синхронизировать данные, нажмите “Синхронизировать данные”.Как отключить вибрацию геймпада на Xbox - шаг 5
  2. Снимите галочку с пункта “Включить вибрацию”.Как отключить вибрацию геймпада на Xbox - шаг 6

Теперь вибрация геймпада для конкретного профиля будет отключена.

Как отключить вибрацию геймпада Xbox в Windows 10

К компьютеру под управлением Windows 10 тоже можно подключить геймпад от Xbox One или Xbox Series. Если игра на компьютере поддерживает работу геймпада, вероятно, в ней будет и вибрация.

Обратите внимание

Геймпад можно подключить к PC с Windows 10 при помощи провода, специального модуля беспроводной связи или по Bluetooth.

Чтобы отключить в Windows 10 вибрацию геймпада Xbox, через поиск найдите приложение “Аксессуары Xbox” и откройте его.

Как отключить вибрацию геймпада Xbox в Windows 10 - шаг 1

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

Перейдите в раздел “Настроить”.

Как отключить вибрацию геймпада Xbox в Windows 10 - шаг 2

Далее выберите редактирование профиля.

Как отключить вибрацию геймпада Xbox в Windows 10 - шаг 3

Здесь можно убрать галку у пункта “Включить вибрацию”, чтобы отключить вибрацию геймпада.

Как отключить вибрацию геймпада Xbox в Windows 10 - шаг 4

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *