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