• 5851阅读
  • 3回复

关于鼠标和键盘一些现象的疑惑,大家不知发觉没? [复制链接]

上一主题 下一主题
离线maxpayne
 
只看楼主 倒序阅读 楼主  发表于: 2008-12-12
— 本帖被 XChinux 执行加亮操作(2009-01-06) —
我用QT+openGL做了一个3D场景。在里面想实现类似第一人称游戏的操作,比如反恐,现有几个问题和我现用的方法,大家不吝一观:
      1  键盘:如果按住一个键,比如方向键,控制人不停移动,但QT中好像默认把按住某个键视为autorepeat,即按住某键时,按下和释放事件不断出现,后来多谢LAZYBONE的赐教,如果调用isrepeat()返回true,就用ignore来忽略,这样就能实现组合键。我的算法是这样:如果按下一个方向键,就使一个标示它状态的布尔变量为true,同时开启定时器,定时器开始控制人物跑动,如果松开键,该变量置false,定时器停止。 不过后来我发现一现象:当你按住键不放时,会经过一个短暂停才会出现autorepeat,而且这个短暂停后,定时器触发的实际时间间隔会变长,导致人物速度变慢。请问当按住某个键时,那个短暂停是怎么一回事?大家可以以方向键为例看看,你按住键移动光标,光标先动一下就停住,然后才连续运动!!!
      2 鼠标:鼠标移动事件触发时,没有键盘那种短暂停现象,但鼠标和键盘事件同时发生时,比如你玩反恐时,用键盘移动人物,同时用鼠标转向,好像分开处理的痕迹很重,比如我晃动鼠标再移动人物,他的速度会放慢甚至发卡。但反恐中好像键鼠事件是同时进行的,你怎么晃鼠标,人物移动都恒速!!是不是我应该用多进程来处理呢
离线nmiirq

只看该作者 1楼 发表于: 2008-12-12
  键盘的短暂停没明白楼主是什么意思,楼下的明白了吗?
离线maxpayne
只看该作者 2楼 发表于: 2008-12-12
我可以举个例子:比如在记事本或word中,你用右方向键移动光标,方向键按下别松开,你会看到光标会先往右动一格,停顿一下,然后才持续向右走动。就是这个意思
离线mileden

只看该作者 3楼 发表于: 2008-12-13
键盘的这种现象是系统性的问题。在控制面板中可以改变“重复延迟的长短”和“重复率的快慢”,但都仍有“重复延迟”。

可以这样做:
按下键盘时,人物就动一小段时间,比如等于重复延迟的时间间隔,而不是仅仅动一下。
快速回复
限100 字节
 
上一个 下一个