Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SDL2使iOS 13和Android上的PS4和Xbox One控制器振动/隆隆声/触觉正常工作?_Android_Ios_Controller_Xbox One_Ps4 - Fatal编程技术网

如何使用SDL2使iOS 13和Android上的PS4和Xbox One控制器振动/隆隆声/触觉正常工作?

如何使用SDL2使iOS 13和Android上的PS4和Xbox One控制器振动/隆隆声/触觉正常工作?,android,ios,controller,xbox-one,ps4,Android,Ios,Controller,Xbox One,Ps4,我使用SDL2,我试图让我的控制器在iOS13和安卓10上发出隆隆声。 您可以在下面看到我的代码摘录: joystick = SDL_JoystickOpen(device); SDL_Haptic * haptic = SDL_HapticOpenFromJoystick(joystick); SDL_HapticRumbleInit(haptic); SDL_HapticRumblePlay(haptic, (float)0.5, 2000); SDL_HapticClose(ha

我使用SDL2,我试图让我的控制器在iOS13和安卓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_Numhappics()的SDL调用在iOS 13和Android 10上始终返回0,在iOS 13上的PS4控制器上也是如此

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

提前感谢您。

您必须在关闭触觉之前添加SDL_延迟(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 );