触力反馈

我们知道了如何用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 joystickgGameController = SDL_JoystickOpen( 0 );if( gGameController == NULL ){printf( "Warning: Unable to open game controller! SDL Error: %s\n", SDL_GetError() );}else{//Get controller haptic devicegControllerHaptic = SDL_HapticOpenFromJoystick( gGameController );if( gControllerHaptic == NULL ){printf( "Warning: Controller does not support haptics! SDL Error: %s\n", SDL_GetError() );}else{//Get initialize rumbleif( SDL_HapticRumbleInit( gControllerHaptic ) < 0 ){printf( "Warning: Unable to initialize rumble! SDL Error: %s\n", SDL_GetError() );}}}
}

在我们初始化操纵杆之后,我们需要在打开的操纵杆上使用SDL_HapticOpenFromJoystick从操纵杆上获取触觉设备。如果我们设法从控制器中获得触觉设备,我们必须使用SDL_HapticRumbleInit来初始化隆隆声。

void close()
{//Free loaded imagesgSplashTexture.free();//Close game controller with hapticsSDL_HapticClose( gControllerHaptic );SDL_JoystickClose( gGameController );gGameController = NULL;gControllerHaptic = NULL;//Destroy window    SDL_DestroyRenderer( gRenderer );SDL_DestroyWindow( gWindow );gWindow = NULL;gRenderer = NULL;//Quit SDL subsystemsIMG_Quit();SDL_Quit();
}

一旦我们完成了一个触觉设备,我们就调用SDL_HapticClose。

//Handle events on queue
while( SDL_PollEvent( &e ) != 0 )
{//User requests quitif( e.type == SDL_QUIT ){quit = true;}//Joystick button presselse 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

SDL编程入门(20)触力反馈相关推荐

  1. SDL编程入门(27)碰撞检测

    碰撞检测 在游戏中,你经常需要判断两个物体是否相互撞击.对于简单的游戏来说,通常用边界框碰撞检测来完成. 碰撞框是检查两个对象之间碰撞的标准方法.当两个多边形没有分开时,它们就会发生碰撞. 这里我们有 ...

  2. SDL编程入门(28)每像素碰撞检测

    每像素碰撞检测 一旦你知道如何检查两个矩形之间的碰撞,你可以检查任何两个图像之间的碰撞,因为所有的图像都是由矩形构成的. 在电子游戏中,所有的东西都可以用矩形来做,甚至这个点: 没看到?我们把它放大: ...

  3. SDL编程入门(19)游戏手柄和操纵杆

    游戏手柄和操纵杆 就像鼠标输入和键盘输入一样,SDL也有能力读取来自操纵杆/游戏手柄/游戏控制器的输入.在本教程中,我们将根据操纵杆的输入使箭头旋转. //模拟手柄死区 const int JOYST ...

  4. SDL编程入门(8)几何图形渲染

    几何图形渲染 除了新的纹理API,SDL还有新的基元渲染调用作为其渲染API的一部分.因此,如果你需要渲染一些基本的形状,而你又不想为它们创建额外的图形,SDL可以为你省力. bool loadMed ...

  5. 【SDL游戏编程入门第一卷】配置SDL环境

    一.前言 这段时间正好使用 SDL,所以打算开一个新的系列,作为经验分享 -- SDL 游戏编程入门. 这也是 AnnihilateSword 在此站的第一个系列,文中可能有许多不足,还请多多包涵,如 ...

  6. Pygame游戏编程入门笔记

    目录 1. Python游戏编程入门 2. 建立开发环境 3. 简单示例 4. 绘制不同形状 5. 事件监听举例 6. 用pygame打印文本 7. 键盘事件 8. 鼠标事件 9. 轮询键盘 10. ...

  7. wii homebrew 程序编程入门指南

    wii homebrew 程序编程入门指南 请尊重原作者的劳动成果,转载请注明出自A9VG和原作者Silenceburn! 本人水平有限,难免错漏,欢迎各路高手拍砖指正,非常感谢! Chapter 1 ...

  8. mapreduce程序输出评分8.6分以上的书名和评分_如何选编程入门资料?光评分高怎么够|文末赠书...

    说到编程入门,很多人第一想到的肯定是Python. 那么,编程零基础应当如何开始学 Python ,才不会入门即放弃?一开始的学习资料的选择尤为重要.那么,如何筛选适合自己的入门资料?这里和大家谈谈我 ...

  9. c#对象集合去重_《C#编程入门》概览

    # [前言] # 01.[C#简介](<C#编程入门>01-C#简介) # 02.[集成开发环境](<C#编程入门> 02-C#集成开发环境) # 03.[初识C# 控制台输入 ...

最新文章

  1. antd Tree 展开和默认选中
  2. pyqt5能否用于鸿蒙系统,PyQt显示来自opencv的视频流
  3. 记录一下Memcached的用法:
  4. Alibaba微服务事务Seata源码深度剖析 - 笔记
  5. Switch Case中的经典
  6. Visual Studio下Qt调用IDL
  7. 【资料整理】编译安装nginx
  8. 图形工具包 linux,GTK 4.0图形工具包正式发布:时隔四年的重大版本!
  9. PHP客服系统-vue客服聊天系统 v1.0
  10. 前端面试常考题:JS垃圾回收机制
  11. 哪些SQL语句会引起全表扫描
  12. 图像处理基础(8):图像的灰度直方图、直方图均衡化、直方图规定化(匹配)
  13. 《计算机网络 自顶向下方法》 第1章 计算机网络和因特网
  14. BinarySerializer
  15. java中object是什么_Java中的Object是什么?
  16. 如何用python爬取股票数据选股_用python爬取股票数据
  17. Java线程状态中BLOCKED和WAITING有什么区别?
  18. Hotkeycontrol录制宏
  19. Python实现人机交互剪刀石头布小游戏(七局四胜制)
  20. 我是如何用问卷调查小程序来赚钱的

热门文章

  1. 京东联盟开发(11)——商品类目(2级)
  2. seo是什么意思,seo是什么意思 职业
  3. 上期所API头文件四、ThostFtdcTraderApi.h--交易相关组件的定义(源代码6.3.19版)
  4. 基于磁盘量身定制,十亿规模高效向量检索方案
  5. SANGFOR防火墙配置上网认证,LDAP自动同步失败
  6. PCIe 6.0 – 关于 PCI Express Gen6 您需要知道的一切
  7. 发布网站笔记2——前后端联系
  8. 在Mac OS X上安装使用lazarus 1.6.4
  9. 使用C# 和基于.Net的以太坊库Nethereum以太坊及智能合约交互实战篇(一)
  10. 简约高端大气PPT模板