Там нет стандартизированного способа.
Разные устройства имеют разные возможности грохочения и ограничения.
Подавляющее большинство устройств не поддерживают фактическую «обратную связь по усилию» (например, рулевое колесо, которое при попадании в бордюр / выбоину позволит программисту отодвинуться назад на определенный угол), но просто грохочет в неконтролируемом / произвольном направлении.
Таким образом, большинство функций Force Feedback, упомянутых в MSDN / DirectX и других API, на практике никогда не реализовывались на пользовательском рынке и не имеют таких плохих и / или непереносимых реализаций «умных» элементов управления (конверт, повтор и т. Д.), Как быть настолько непригодным, что на практике разработчики часто вынуждены просто использовать элементы управления ВКЛ / ВЫКЛ непосредственно со своей собственной реализацией эффекта.
Более продвинутые устройства, которые позволяют сервоуправляемую обратную связь по силе, нуждаются в пользовательских API, поскольку универсальные API ввода не поддерживают необходимые параметры (точные углы, точные силы, пределы и т. Д.).
Добавление новых технологий, таких как VR-перчатки, делает эти универсальные API еще более недостающими.
Наиболее распространенная реализация - это два двигателя постоянного тока с несбалансированной нагрузкой каждый, один из которых тяжелее другого и не имеет точного управления скоростью.
Как минимум, у вас есть контроль над ними, и вы можете выполнять ограниченное управление мощностью ШИМ, но не точное управление скоростью. Вы не знаете, какова будет скорость и возникающая вибрация. Разные контроллеры имеют разные двигатели и веса, которые будут работать на разных скоростях для одной и той же настройки.
Двигатели должны сначала раскрутиться и в течение некоторого времени потреблять полную мощность, а затем могут быть настроены на более низкую настройку. Задержка ускорения сильно ограничивает отзывчивость.
Контроллеры часто обновляются один раз за кадр, обеспечивая частоту обновления примерно от 20 Гц до 100 Гц. Это ограничивает разрешение вашего ШИМ-управления, поскольку вы не хотите, чтобы двигатели глохли при самых низких настройках. И вы не знаете, насколько низкими могут быть двигатели контроллера конечного пользователя перед остановкой (остановкой), поэтому вам нужен хороший запас прочности.
Некоторые системные требования накладывают дополнительные ограничения на то, что вы можете с ними делать.
Мобильные устройства обычно имеют только 1 вибрационный двигатель, и ШИМ может быть невозможен из-за низкой инерции из-за размера веса и медленной скорости обновления. Система может фильтровать его дальше, чтобы предотвратить неправильное использование или даже повреждение (ограничения транзистора силового привода и пики индукции) или просто очень медленную подсистему GPIO.
На мобильном телефоне вы можете быть ограничены или хотите ограничить себя «вибрацией примерно X * 50 миллисекунд» без ШИМ.
Некоторые новые устройства и контроллеры имеют соленоид, управляемый как динамик звуковой волной с низкой частотой дискретизации. Они дают вам больше контроля, но полностью отличаются от более распространенных контроллеров.
Из - за все эти различия , которые вы можете захотеть абстрагировать вибрационную систему , чтобы играть ограниченное количество высокоуровневых макро-эффекты по имени в перестрелке и забыть моды: PlayVibration(player, "Got Loot");
, PlayVibration(player, "Heavy Fall");
, StopAllVibrationFor(player);
, ...
Затем вам придется создавать низкоуровневые эффекты вибрации и код контроля вибрации, адаптированные для каждой платформы в отдельности .
Даже для музыкальной игры, требующей одного удара PlayVibration
для каждого удара, легче управлять и контролировать, если учитывать приостановку игры и проблемы повторной синхронизации потенциального генератора периодических эффектов.
Хотя устройства с реальным грохотом, управляемым соленоидом, могут рассматриваться как аудиоустройства и использовать аудио API из-за проблем с аккумулятором, это может противоречить правилам системы, если соленоид постоянно включен / активен . «Уровень мощности 0» может не совпадать с «Отключение соленоида», поэтому даже в этом случае требуется особая осторожность.