游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4213|回复: 10

Directinput 问题:

[复制链接]

3

主题

17

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2004-8-20 21:23:00 | 显示全部楼层 |阅读模式
Directinput 问题:
主程序不断循环,每次调用GetDeviceState获得,新的鼠标按键状态,然后立刻根据状态调用相应函数

问题:按键一次,因为程序不断循环,而多次检测到按键,从而多次调用函数,那么如何防止多次检测到按键呢?(不用GetAsyncKeyState)

6

主题

582

帖子

582

积分

高级会员

Rank: 4

积分
582
发表于 2004-8-20 22:24:00 | 显示全部楼层

Re:Directinput 问题:

函数执行体里可以加入消毁一定脉冲内的设备信息数据,DOS下的清除缓冲区的方法在这里不好使.

30

主题

276

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2004-8-21 17:33:00 | 显示全部楼层

Re:Directinput 问题:

晕。。。GetDeviceState是检测设备当前状态的,是直接读取的设备的状态
鼠标和键盘都是属于 不是按下就是没按下 的设备,没有按键一次这个概念哈,你想得到按键一次这个概念,要自己写一些代码,比如你检测到鼠标按下,又松开了,那就表示它按键一次了,同样你还可以加入时间的判定什么的,就象windows做的那样。

1

主题

8

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2004-8-23 19:55:00 | 显示全部楼层

Re:Directinput 问题:

好深奥!
加上感冒,我看起来就更晕了

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2004-8-23 21:42:00 | 显示全部楼层

Re:Directinput 问题:

所以我都是直接拿DINPUT的代码来用……

14

主题

283

帖子

293

积分

中级会员

Rank: 3Rank: 3

积分
293
QQ
发表于 2004-8-25 01:29:00 | 显示全部楼层

Re:Directinput 问题:

自己视游戏情况加些逻辑判断啊,我有个简单的方法,设FLAG=1,按下时,判断FLAG==1则执行函数。函数内在帜置FLAG=0,放开键时置FLAG=1,这样即使你一直按着键盘某个键,相关函数也只执行1次,而且这个方法可以针对单独1个键,并不影响其他需要连续执行的按键。
说错了请指针

41

主题

264

帖子

519

积分

高级会员

Rank: 4

积分
519
发表于 2004-8-25 11:55:00 | 显示全部楼层

Re:Directinput 问题:

不使用立即模式,改为缓冲模式应该能解决问题,处理起来可能会复杂些

6

主题

26

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2004-8-26 02:17:00 | 显示全部楼层

Re:Directinput 问题:

和我那个问题差不多

33

主题

445

帖子

446

积分

中级会员

Rank: 3Rank: 3

积分
446
发表于 2004-8-26 02:33:00 | 显示全部楼层

Re:Directinput 问题:

把检测按键 放到 windows回调函数中,就可避免。

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2004-8-26 08:46:00 | 显示全部楼层

Re:Directinput 问题:

         缓冲模式支持的很好,在网上有相关的技术文档,不过比较复杂 ,也可以自己检测按下和松开的状态,来判断按键一次。
while(1)
{
int flag=0;
if (DIKEYDOWN(DIK_Q))
   flag=1 ;
if(flag)
   func();
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-17 17:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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