| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 172 人关注过本帖
标题:如何消除键盘停顿的时间
只看楼主 加入收藏
炫色流年
Rank: 2
等 级:论坛游民
帖 子:61
专家分:18
注 册:2011-8-8
结帖率:38.46%
收藏
已结贴  问题点数:5 回复次数:9 
如何消除键盘停顿的时间
大家都知道,在平常的记事本输入字符时,就是按住键盘的一个字母,会先输出一个字母,然后停顿一段时间,再继续连续快速输出这个字母
在 雷电 这样的游戏里面,一按一个键(比如左键),飞机就会立即连续地向左飞,而不会出现停顿的状况

我想问问高手们,怎样消除这段停顿时间,做到 雷电 这样的效果

void __fastcall TForm::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
//这里面怎么写????假设我要移动的是一个图片框,名字是ball
如果写
  if(判断按下左键) ball->left-=10;
的话,就会出现停顿效果,怎么办?
}

求高手指教啊!!!!!!
搜索更多相关主题的帖子: 如何 字母 
2012-08-14 20:30
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:1 
其实你只用问怎么判断一个键是否被按下了。因为按下一个键和抬起一个键时键盘会送扫描码,中间的过程是闲着的。
至于侦测到按键按下之后应该干什么,按下和抬起之间应该怎样处理是你编程的工作。

给你移到 windows 区吧。我不懂 windows 的那些东西。
2012-08-14 22:25
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:1 
如果他问的是编程貌似应该移动到MFC VC 那个版比较合适

你说的这个叫重复延迟 Xwindow下是用kbdrate设置罢 windows控制面板里就能调 不过消息处理怎么写我就不知道了
2012-08-14 22:52
lonmaor
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:1 
这个该移到BCB区

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2012-08-14 22:57
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
是吗。L版 自行处理呗。
在下路痴,不是很熟悉这边的地理状况。
2012-08-14 23:07
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
这个问题挺有意思

我能想到的

直接处理按下和放开的消息 不管重复的 在按下和放开之间手工处理 也就是绕过这个重复率 我试了试 貌似这个重复延迟直接消息发送? 有待深究

或者直接用钩子 当然这个增加了编程复杂性也有稳定性问题 但应该是一种比较好的方法


2012-08-14 23:11
lonmaor
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:0 
对windows的消息机制了解不深
我能想到的是
当出发BUTTONDOWN事件时,创建一个while(true)的循环,循环体内是按下键后要触发的事件,然后跟一个从消息队列中取消息的函数,如果不是对应的BUTTONUP,则把该消息继续插回原消息队列。
可行性待定

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2012-08-15 11:09
天剑山
Rank: 4
等 级:业余侠客
威 望:3
帖 子:119
专家分:266
注 册:2012-8-3
收藏
得分:1 
可以考虑另开一个线程,对按键进行监控
2012-08-15 11:12
休闲客
Rank: 1
等 级:新手上路
帖 子:3
专家分:9
注 册:2012-8-16
收藏
得分:1 
在你的程序里你得编写三个消息处理程序,一个是键铵下消息处理程序,一个是键放开消息处理程序,一个时钟发生器发出的消息处理程序,在键按下时,设置一个你想要速度的时钟发生器,即每隔多少时间出一个时间消息,在时间消息处理程序中处理你想做的事情(如移动图片等),在键放开的消息处理中,停止你做的事情,同时清除时间发生器。
希望能帮到你,详细的代码,我想你应该会的。
2012-08-16 10:14
炫色流年
Rank: 2
等 级:论坛游民
帖 子:61
专家分:18
注 册:2011-8-8
收藏
得分:0 
我想问的是,大家打开记事本,按右方向键,死死按住一直不要松开,就会看光标先向右移动了一格,然后停住,大概过了一秒之后,光标就会快速地向右移动。如果把那个光标当作雷电里的飞机,大家都知道雷电里的飞机不会出现这种停住一秒的状况。我用一个图片框载入雷电的图片,在窗体的keydown事件里写代码。游戏开始时,如果玩家一直按着一个方向键(如向右),飞机就会向右移动一下,停顿大概一秒,再连续不间断向右移动,这种情况和记事本里的光标一样。我想问的是,如何消除那个大约一秒的停顿??
2012-08-25 19:56
快速回复:如何消除键盘停顿的时间
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018677 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved