触力反馈
我们知道了如何用SDL使用操纵杆,现在我们可以使用新的触觉API来使控制器震动。
//带有触力反馈的游戏控制器1处理程序
SDL_Joystick* gGameController = NULL;
SDL_Haptic* gControllerHaptic = NULL;
触觉设备是一种能提供某种物理反馈的东西。在本例中,它使控制器发出隆隆声。触觉设备的数据类型直观地命名为SDL_haptic。
//Initialize SDL
if( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC ) < 0 )
{
printf( "SDL could not initialize! SDL Error: %s\n", SDL_GetError() );
success = false;
}
与操纵杆子系统一样,你需要确保初始化触觉专用子系统才能使用触觉。
//Check for joysticks
if( SDL_NumJoysticks() < 1 )
{
printf( "Warning: No joysticks connected!\n" );
}
else
{
//Load joystick
gGameController = SDL_JoystickOpen( 0 );
if( gGameController == NULL )
{
printf( "Warning: Unable to open game controller! SDL Error: %s\n", SDL_GetError() );
}
else
{
//Get controller haptic device
gControllerHaptic = SDL_HapticOpenFromJoystick( gGameController );
if( gControllerHaptic == NULL )
{
printf( "Warning: Controller does not support haptics! SDL Error: %s\n", SDL_GetError() );
}
else
{
//Get initialize rumble
if( SDL_HapticRumbleInit( gControllerHaptic ) < 0 )
{
printf( "Warning: Unable to initialize rumble! SDL Error: %s\n", SDL_GetError() );
}
}
}
}
在我们初始化操纵杆之后,我们需要在打开的操纵杆上使用SDL_HapticOpenFromJoystick从操纵杆上获取触觉设备。如果我们设法从控制器中获得触觉设备,我们必须使用SDL_HapticRumbleInit来初始化隆隆声。
void close()
{
//Free loaded images
gSplashTexture.free();
//Close game controller with haptics
SDL_HapticClose( gControllerHaptic );
SDL_JoystickClose( gGameController );
gGameController = NULL;
gControllerHaptic = NULL;
//Destroy window
SDL_DestroyRenderer( gRenderer );
SDL_DestroyWindow( gWindow );
gWindow = NULL;
gRenderer = NULL;
//Quit SDL subsystems
IMG_Quit();
SDL_Quit();
}
一旦我们完成了一个触觉设备,我们就调用SDL_HapticClose。
//Handle events on queue
while( SDL_PollEvent( &e ) != 0 )
{
//User requests quit
if( e.type == SDL_QUIT )
{
quit = true;
}
//Joystick button press
else if( e.type == SDL_JOYBUTTONDOWN )
{
//以75%的强度播放隆隆声,持续500毫秒。
if( SDL_HapticRumblePlay( gControllerHaptic, 0.75, 500 ) != 0 )
{
printf( "Warning: Unable to play rumble! %s\n", SDL_GetError() );
}
}
}
要真正让控制器发出隆隆声,你需要让它播放某种隆隆声。最简单的方法是调用SDL_HapticRumblePlay,它需要输入触觉设备、强度(百分比)和隆隆声的持续时间。在这里,每当SDL_JoyButtonEvent发生时,我们都会让控制器以75%的强度轰鸣半秒。
现在,SDL 2触觉API还有很多功能没有在这里介绍,包括制作自定义效果,处理多个隆隆声设备,以及处理触觉鼠标。你可以在SDL 2力反馈文档中查看。
在 这里下载本教程的媒体和源代码。
关注我的公众号:编程之路从0到1
血色v残阳
编程达人
掌握C、Java、Python、Go、Dart语言等多种编程语言,擅长GUI开发,曾从事Android原生开发,Flutter跨平台开发等等工作微信公众号:“编程之路从0到1”