游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3283|回复: 5

请教如何用DirectInput实现对键盘某键一直按着的检测?

[复制链接]

3

主题

12

帖子

25

积分

注册会员

Rank: 2

积分
25
发表于 2009-3-5 18:54:00 | 显示全部楼层 |阅读模式
    我是个Direct3D新手,在编小游戏过程中想用DirectInput实现对键盘某键一直按着的检测弄了好久好像是实现了,但总
觉得不妥,想请教一下论坛上的高手。

    我是用DirectInput的缓存通过GetDeviceData()来取得从键盘读取的数据,取得数据后我通过

    inputKey.wOfs == DIK_W && inputKey.dwData & 0x80(inputKey的声明DIDEVICEOBJECTDATA* inputKey)

    来实现对“W”键是否按下检测,我开始以为这样就能实现对是不是一直按着“W”键的检测,但是测试发现当一直按着“W”时它只是按下的时候有反应,后来就没有了,接着我测出了

     一直按着“W”时,GetDeviceData(sizeof(DIDEVICEOBJECTDATA),inputKey,&wElements,0)中的wElements除了第一次外都是“0”。

     试了好久我后来是在执行 “inputKey.wOfs == DIK_W && inputKey.dwData & 0x80”这个判断和测试后调用了Unacquire()来取消访问权限,这样的话就能实现上面的功能。

     虽然我实现了这个功能,但是总感觉到不爽,每次都要取消访问权限感觉怪怪的,不知道高手门是怎么解决这个问题的,希望能指点一下,谢谢!

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2009-3-5 21:35:00 | 显示全部楼层

Re:请教如何用DirectInput实现对键盘某键一直按着的检测?

你的模式设置错了
INPUT有两种检测模式
好好看看SDK里面的SAMPLE

3

主题

12

帖子

25

积分

注册会员

Rank: 2

积分
25
 楼主| 发表于 2009-3-5 22:17:00 | 显示全部楼层

Re:请教如何用DirectInput实现对键盘某键一直按着的检测?

你的意思是说立即模式和缓存模式吗?我设置的是缓存模式,立即模式不行的吧。

3

主题

263

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2009-3-6 00:47:00 | 显示全部楼层

Re:请教如何用DirectInput实现对键盘某键一直按着的检测?

按道理讲,DInput是检测按键的状态的,并不像楼主所说的那种,只检测按下..
可能真的是参数有问题吧..
我也没有遇到过,帮顶一下

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2009-3-6 00:50:00 | 显示全部楼层

Re:请教如何用DirectInput实现对键盘某键一直按着的检测?

就是要用立即模式
用下就知道了

如果你用缓存模式,是捕获按键按下和弹起事件
其实也是可以实现一样的功能,
定义一个标志位,按下时设置为真,弹起触发时设置为假
当然这些要和实际结合才比较清晰,不一样的应用需要不一样的模式

3

主题

12

帖子

25

积分

注册会员

Rank: 2

积分
25
 楼主| 发表于 2009-3-6 16:29:00 | 显示全部楼层

Re:请教如何用DirectInput实现对键盘某键一直按着的检测?

解决了,谢谢你啦,之前我用过立即模式,不过没仔细试以为不能同时按多个键,所以就换了缓存模式的。你提醒后我去编译了一下sdk的例子发现是可以的,那原来那个问题就简单了,呵呵!

谢谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 05:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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