博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
防止Direct Input获取多次输入
阅读量:6295 次
发布时间:2019-06-22

本文共 729 字,大约阅读时间需要 2 分钟。

如果将Direct input处理键盘输入的函数放到游戏循环中,由于Direct Input速度极快,用户的一次按键,Direct Input将会产生多次按键事件,导致程序多次被响应,处理如下。

char hitLetter = '';static bool keyPressed = false;if(dinput_->getKey()){    if(!keyPressed)    {
hitLetter = dinput_->getKey(); keyPressed = true; }}else{ keyPressed = false;}

关键在于keyPressed这个静态变量,初始为false,当有键按下时,dinput_->getKey()返回真值,下面的if语句判断也为真,此时将按键读入hitLetter中,并将keyPressed置为true。这样只要按键没有抬起来,当程序下次进入时,keyPressed已经为true,if语句将不再执行。当按键抬起时,dinput_->getKey()返回值不再为真,这时进入else语句,将keyPressed置为false,继续接受下一次按键。

另一个方法是将Direct Input处理键盘输入的函数放到消游戏循环外,以确保每次按键只被处理一次。比如放到WM_KEYDOWN的消息中处理。或者直接使用Windows键盘消息,而不是用Direct Input。

==

本文转自zdd博客园博客,原文链接:http://www.cnblogs.com/graphics/archive/2013/02/27/2737965.html,如需转载请自行联系原作者

你可能感兴趣的文章
关于再次查看已做的多选题状态逻辑问题
查看>>
动态下拉菜单,非hover
查看>>
政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信...
查看>>
简单易懂的谈谈 javascript 中的继承
查看>>
iOS汇编基础(四)指针和macho文件
查看>>
Laravel 技巧锦集
查看>>
Android 使用 ViewPager+RecyclerView+SmartRefreshLayout 实现顶部图片下拉视差效果
查看>>
Flutter之基础Widget
查看>>
写给0-3岁产品经理的12封信(第08篇)——产品运营能力
查看>>
ArcGIS Engine 符号自动化配置工具实现
查看>>
小程序 · 跳转带参数写法,兼容url的出错
查看>>
flutter error
查看>>
Flask框架从入门到精通之模型数据库配置(十一)
查看>>
10年重新出发
查看>>
2019年-年终总结
查看>>
聊聊elasticsearch的RoutingService
查看>>
让人抓头的Java并发(一) 轻松认识多线程
查看>>
从源码剖析useState的执行过程
查看>>
地包天如何矫正?
查看>>
中间件
查看>>