防止Direct Input获取多次输入

简介:

如果将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,如需转载请自行联系原作者

相关文章
|
3月前
|
JavaScript 前端开发
input 输入 限制 大全
input 输入 限制 大全
111 0
|
2月前
|
固态存储 SDN
编写input()和output()函数输入
编写input()和output()函数输入。
49 11
|
8月前
Input 标签监听内容输入(change、input 事件区别)
Input 标签监听内容输入(change、input 事件区别)
59 0
|
7月前
input type=file过滤图片
input type=file过滤图片
28 0
|
开发者 Python
input() 函数|学习笔记
快速学习 input() 函数
134 0
|
关系型数据库 MySQL 数据库管理
|
关系型数据库 MySQL 数据库管理