SDL2:触觉方法表现不如预期

Posted

技术标签:

【中文标题】SDL2:触觉方法表现不如预期【英文标题】:SDL2: Haptics methods behaving not as expected 【发布时间】:2020-12-07 21:39:38 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

如果您出于任何原因必须使用 SDL2 触觉方法,虽然这并不是您可能正在寻找的答案,但 this comment 在 SDL2 中与触觉类似的问题上声明如下:

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

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

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

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

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

【讨论】:

以上是关于SDL2:触觉方法表现不如预期的主要内容,如果未能解决你的问题,请参考以下文章

SDL2.0显示YUV图片的方法

移植SDL2.2问题及解决方法

Swift:UIButtons 网格的触觉效果

iOS:如何检查是不是启用了触觉反馈(iOS 设置)

python和ctypes cdll,没有从函数中获得预期的回报

长按时颤振触觉反馈