游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: liujian885

求救:dinput键盘输入过快的问题

[复制链接]

27

主题

418

帖子

455

积分

中级会员

Rank: 3Rank: 3

积分
455
QQ
发表于 2007-4-8 16:06:00 | 显示全部楼层

Re:求救:dinput键盘输入过快的问题

要判断按键是按下还是抬起,只能使用缓冲模式。
你使用的是直接模式,只能判断是否按了一个键。

15

主题

363

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-4-9 10:52:00 | 显示全部楼层

Re:求救:dinput键盘输入过快的问题

--quote : 但结果照旧,谁能告诉我这段代码出什么问题了?


速度太快……10几毫秒变一次,当然一点用都没有了……


应该这样:
KeyState   lastState;
KeyState   curState;

在Update里
{
    // 将本帧信息刷到上帧信息
    memcpy( lastState, curState, sizeof(lastState) );
    // 刷本帧信息
    Update(curState);
}

然后 :

BOOL IsKeyPressed(int key,bool *a)
{
    // 如果上帧没按,本帧按了,这才算Press
    if( (curState[key]&0x80) && ! (lastState[key]&0x80) )
        return TRUE;
    return FALSE;
}
我以前就是这么写的,这个应该是可以用的。

72

主题

447

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
QQ
发表于 2007-4-9 17:14:00 | 显示全部楼层

Re:求救:dinput键盘输入过快的问题

把你的操作写在keyup里!!
因为keydown是一个过程函数,当你按下按钮到松开始终执行,但是keyup是一个瞬间的相应,他检测初始状态是从keydown变成up的一个瞬间,所以不会产生楼主的按下反复执行的问题。
其实大多数win32相应函数都是在瞬发中执行的,最显著的例子就是点击"确定"按钮,鼠标松开才发送消息而不是点击就发送。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-4-12 19:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表