SDL编程入门(20)触力反馈
触力反馈
我们知道了如何用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)触力反馈相关推荐
- SDL编程入门(27)碰撞检测
碰撞检测 在游戏中,你经常需要判断两个物体是否相互撞击.对于简单的游戏来说,通常用边界框碰撞检测来完成. 碰撞框是检查两个对象之间碰撞的标准方法.当两个多边形没有分开时,它们就会发生碰撞. 这里我们有 ...
- SDL编程入门(28)每像素碰撞检测
每像素碰撞检测 一旦你知道如何检查两个矩形之间的碰撞,你可以检查任何两个图像之间的碰撞,因为所有的图像都是由矩形构成的. 在电子游戏中,所有的东西都可以用矩形来做,甚至这个点: 没看到?我们把它放大: ...
- SDL编程入门(19)游戏手柄和操纵杆
游戏手柄和操纵杆 就像鼠标输入和键盘输入一样,SDL也有能力读取来自操纵杆/游戏手柄/游戏控制器的输入.在本教程中,我们将根据操纵杆的输入使箭头旋转. //模拟手柄死区 const int JOYST ...
- SDL编程入门(8)几何图形渲染
几何图形渲染 除了新的纹理API,SDL还有新的基元渲染调用作为其渲染API的一部分.因此,如果你需要渲染一些基本的形状,而你又不想为它们创建额外的图形,SDL可以为你省力. bool loadMed ...
- 【SDL游戏编程入门第一卷】配置SDL环境
一.前言 这段时间正好使用 SDL,所以打算开一个新的系列,作为经验分享 -- SDL 游戏编程入门. 这也是 AnnihilateSword 在此站的第一个系列,文中可能有许多不足,还请多多包涵,如 ...
- Pygame游戏编程入门笔记
目录 1. Python游戏编程入门 2. 建立开发环境 3. 简单示例 4. 绘制不同形状 5. 事件监听举例 6. 用pygame打印文本 7. 键盘事件 8. 鼠标事件 9. 轮询键盘 10. ...
- wii homebrew 程序编程入门指南
wii homebrew 程序编程入门指南 请尊重原作者的劳动成果,转载请注明出自A9VG和原作者Silenceburn! 本人水平有限,难免错漏,欢迎各路高手拍砖指正,非常感谢! Chapter 1 ...
- mapreduce程序输出评分8.6分以上的书名和评分_如何选编程入门资料?光评分高怎么够|文末赠书...
说到编程入门,很多人第一想到的肯定是Python. 那么,编程零基础应当如何开始学 Python ,才不会入门即放弃?一开始的学习资料的选择尤为重要.那么,如何筛选适合自己的入门资料?这里和大家谈谈我 ...
- c#对象集合去重_《C#编程入门》概览
# [前言] # 01.[C#简介](<C#编程入门>01-C#简介) # 02.[集成开发环境](<C#编程入门> 02-C#集成开发环境) # 03.[初识C# 控制台输入 ...
最新文章
- antd Tree 展开和默认选中
- pyqt5能否用于鸿蒙系统,PyQt显示来自opencv的视频流
- 记录一下Memcached的用法:
- Alibaba微服务事务Seata源码深度剖析 - 笔记
- Switch Case中的经典
- Visual Studio下Qt调用IDL
- 【资料整理】编译安装nginx
- 图形工具包 linux,GTK 4.0图形工具包正式发布:时隔四年的重大版本!
- PHP客服系统-vue客服聊天系统 v1.0
- 前端面试常考题:JS垃圾回收机制
- 哪些SQL语句会引起全表扫描
- 图像处理基础(8):图像的灰度直方图、直方图均衡化、直方图规定化(匹配)
- 《计算机网络 自顶向下方法》 第1章 计算机网络和因特网
- BinarySerializer
- java中object是什么_Java中的Object是什么?
- 如何用python爬取股票数据选股_用python爬取股票数据
- Java线程状态中BLOCKED和WAITING有什么区别?
- Hotkeycontrol录制宏
- Python实现人机交互剪刀石头布小游戏(七局四胜制)
- 我是如何用问卷调查小程序来赚钱的
热门文章
- 京东联盟开发(11)——商品类目(2级)
- seo是什么意思,seo是什么意思 职业
- 上期所API头文件四、ThostFtdcTraderApi.h--交易相关组件的定义(源代码6.3.19版)
- 基于磁盘量身定制,十亿规模高效向量检索方案
- SANGFOR防火墙配置上网认证,LDAP自动同步失败
- PCIe 6.0 – 关于 PCI Express Gen6 您需要知道的一切
- 发布网站笔记2——前后端联系
- 在Mac OS X上安装使用lazarus 1.6.4
- 使用C# 和基于.Net的以太坊库Nethereum以太坊及智能合约交互实战篇(一)
- 简约高端大气PPT模板