首页 > 解决方案 > 如何使 PS4 和 Xbox One 控制器在 iOS 13 和 Android 上使用 SDL2 正常工作?

问题描述

我使用 SDL2,并尝试让我的控制器在 iOS 13 和 Android 10 上都发出隆隆声。您可以在下面看到我的代码摘录:

 joystick = SDL_JoystickOpen(device);
 SDL_Haptic * haptic = SDL_HapticOpenFromJoystick(joystick);
 SDL_HapticRumbleInit(haptic);
 SDL_HapticRumblePlay(haptic, (float)0.5, 2000);
 SDL_HapticClose(haptic);

但目前它仅适用于带有 PS4 控制器的 Android 10,带有 Xbox One 控制器,对 SDL_NumHaptics() 的 SDL 调用在 iOS 13 和 Android 10 上总是返回 0,这与 iOS 13 上的 PS4 控制器相同......

有人遇到过同样的问题吗?如果是,有没有办法解决或解决它?

先感谢您。

标签: androidioscontrollerxbox-oneps4

解决方案


您必须在关闭 Haptic 之前添加 SDL_Delay(2000)。如果您不这样做,那么您将在它真正发出隆隆声之前将其关闭

     joystick = SDL_JoystickOpen(device);
     SDL_Haptic * haptic = SDL_HapticOpenFromJoystick(joystick);
     SDL_HapticRumbleInit(haptic);
     SDL_HapticRumblePlay(haptic, (float)0.5, 2000);

     SDL_Delay(2000);

     SDL_HapticClose(haptic);

我还将添加相应的检查,如 sdl2 的 wiki 中所示:

SDL_Haptic *haptic;

// Open the device
haptic = SDL_HapticOpen( 0 );
if (haptic == NULL)
   return -1;

// Initialize simple rumble
if (SDL_HapticRumbleInit( haptic ) != 0)
   return -1;

// Play effect at 50% strength for 2 seconds
if (SDL_HapticRumblePlay( haptic, 0.5, 2000 ) != 0)
   return -1;
SDL_Delay( 2000 );

// Clean up
SDL_HapticClose( haptic );

推荐阅读