【问题标题】:How can I make PS4 and Xbox One controllers vibration / rumble / haptic on iOS 13 and Android works properly using SDL2?如何使 PS4 和 Xbox One 控制器在 iOS 13 和 Android 上使用 SDL2 正常工作?
【发布时间】:2020-04-24 04:58:30
【问题描述】:

我使用 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 控制器相同...

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

提前谢谢你。

【问题讨论】:

    标签: android ios controller xbox-one ps4


    【解决方案1】:

    您必须在关闭 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 );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-21
      • 2017-05-15
      • 1970-01-01
      • 2020-02-01
      • 2018-12-10
      • 2015-03-23
      • 2014-05-18
      • 2015-03-19
      相关资源
      最近更新 更多