首页 > 解决方案 > SDL2:触觉方法表现不如预期

问题描述

我遇到了 SDL2 的 Haptics 方法的一些奇怪行为。我已经在 Linux 64 位下使用 libsdl2-dev 和 libsdl2-2.0-0(均在 v2.0.10 版本中)和 Windows 10 64 位(最新的 SDL 二进制版本)对此进行了测试。作为控制器,我使用了 8Bitdo SF30 Pro 游戏手柄和 Nintendo Switch Pro 控制器——两者都通过 USB 连接。

  1. Nintendo Switch Pro 控制器并未完全标记为触觉。
  2. 只有在 PlayStation 或 Xbox 模式下启动时,8Bitdo 控制器才会被标记为触觉 - 但两者SDL_HapticRumblePlaySDL_HapticRunEffect以相当低的频率(我假设为 2-5 Hz)驱动震动马达,产生的幅度很小。效果结构的任何变化(例如波型、幅度、方向、周期等)都不会显示任何改进。似乎每次SDL_HapticRunEffect通话时,振动都会有所不同。该SDL_HapticsSetGain方法似乎也没有任何效果。

你对这些行为有什么建议吗?

  1. 为什么 Nintendo Pro 控制器不被识别为触觉设备?
  2. 如何处理 8Bitdo 控制器的奇怪隆隆声行为?不过,控制器的隆隆声功能似乎完好无损(因为它在某些 Windows 游戏中会振动)。

标签: controllersdl-2vibrationgamepad

解决方案


如果您出于任何原因必须使用 SDL2 触觉方法,虽然这不完全是您可能正在寻找的答案,但此评论对 SDL2 中的触觉类​​似问题表示如下:

对于游戏手柄,触觉接口已被弃用,取而代之的是 SDL_GameControllerRumble(),它在更多平台上为游戏控制器实现。一般来说,触觉 API 正朝着仅支持轮子和飞行杆的方向发展。(2021 年 8 月)

因此,您的两个问题的答案可能是 SDL2 触觉已被游戏手柄弃用,尤其是 Nintendo Pro 控制器等较新的游戏手柄,因此不能保证它能够正常工作(或根本不能工作)。

但是,如果您只是想让您的游戏手柄发出隆隆声(这就是我偶然发现这个问题的原因),那么使用SDL_GameControllerRumble()应该可以完成这项工作。它适用于我的 Nintendo Pro 控制器。

查看SDL_GameControllerRumble - SDL Wiki了解有关如何使用它的更多信息。

使用此功能所需的版本是SDL 2.0.9。


推荐阅读