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

本文共 642 字,大约阅读时间需要 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。

==

转载地址:http://cyybm.baihongyu.com/

你可能感兴趣的文章
master..xp_fileexist
查看>>
想了解概率图模型?你要先理解图论的基本定义与形式
查看>>
win7配置两个tomcat(8 & 7)
查看>>
Spring开发工具Spring Tools Suite(STS)
查看>>
stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结
查看>>
weblogic为同一domain下的不同server添加不同参数
查看>>
MapReduce中的Join
查看>>
Thread.setDaemon设置说明
查看>>
图像灰度化
查看>>
Java常用工具类之ArrayUtil
查看>>
utuntu16.04安装caffe+Matlab2017a+opencv3.1+CUDA8.0+cudnn6.0
查看>>
netty中的ChannelHandler和ChannelPipeline
查看>>
数据结构 -- 栈
查看>>
官方Java编码规范
查看>>
浏览器神器--vimium
查看>>
由支付宝当面付引发的NatApp方便调试回调
查看>>
进程与线程的一个简单解释
查看>>
SQLServer图数据库一些优点
查看>>
基于贪心算法求解TSP问题(JAVA)
查看>>
DefaultHttpRequestRetryHandler有重试3次的机制啊 为什么要重写?
查看>>