游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4611|回复: 6

对于DIRECTX,如何检测一个按键是否是一直按着的。。。

[复制链接]

19

主题

52

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2009-4-4 22:27:00 | 显示全部楼层 |阅读模式
比如说开火“space”键
我要求只能一下一下按“space”键
按一次发弹一次,而一直按着就不能反映

要如何来检测一个键是否是一直按着的呢?

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2009-4-5 02:35:00 | 显示全部楼层

Re:对于DIRECTX,如何检测一个按键是否是一直按着的。。。

对比上一帧的按键状态和这一帧的按键状态。

0

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2009-4-5 16:43:00 | 显示全部楼层

Re:对于DIRECTX,如何检测一个按键是否是一直按着的。。。

学习。。。。。

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2009-4-6 11:35:00 | 显示全部楼层

Re:对于DIRECTX,如何检测一个按键是否是一直按着的。。。

用BUFFER模式判断 KEY_UP或KEYDOWN

19

主题

52

帖子

52

积分

注册会员

Rank: 2

积分
52
 楼主| 发表于 2009-4-7 08:03:00 | 显示全部楼层

Re: 对于DIRECTX,如何检测一个按键是否是一直按着的。。。

恩,我已经解决了
就是用一个BOOL变量 space_up
初始化为true,表示按键为弹起状态
检测时
如果space按键按下且space_up为true
则说明上一帧的按键状态是弹起的,此时可以响应按键
并且设置space_up为false

否则设置space_up为true


具体代码
           static bool space_up = true; // 初始按键是弹起的

        if(pdinput->keys[DIK_SPACE] & 0x80) //是否按了space键
        {
                if(space_up) //上次space是否是弹起的
                {
                     //响应按键
                }
                space_up = false; // space按键弹起状态设为false
        }
        else
        {
                space_up = true; // space状态设为true
        }


86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2009-4-7 23:24:00 | 显示全部楼层

Re:对于DIRECTX,如何检测一个按键是否是一直按着的。。。

只要你能判断按键开闭,就能实现。
每个按键用一个至少长度为2的队列记录开闭。
前一次闭合,本次闭合,就是长按。
前一次未闭合,本次闭合,就是刚按下。
前一次闭合,本次未闭合,就是刚松开。

而且你可以用一个32位整形当队列来记录按键状态,每次做个移位就OK了。判断时用位运算。

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2012-9-22 00:13:00 | 显示全部楼层

Re: 对于DIRECTX,如何检测一个按键是否是一直按着的。。。

[em1]多谢,我的问题也解决了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-27 16:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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