2011-03-23 57 views
0

我目前正在编写一个突破版本作为C和OpenGL的快速学习体验。GLUT键盘回调问题C

我在移动桨板时遇到了一些问题。我设置了一个键盘回调,这样当按下左箭头时,它会从桨板上的x值减1,并在按右箭头时将x值加1。

考虑到这一点,当我握住任一键时,桨叶移动速度极其缓慢。例如,我可以通过增加x值更改为10的数量来更改此值。当我这样做时,桨在整个屏幕上似乎都会结结巴巴,因为它每次跳跃10次。它现在确实沿屏幕移动得更快,但看起来并不平坦。

我使用GLUT在OSX上进行窗口化。

有没有加快速度并保持顺畅的方法?

+0

你在你的'glutKeyboardFunc()'回调函数或'glutIdleFunc()'回调函数中发出'glutPostRedisplay()'吗? – genpfault 2011-03-23 20:32:27

+1

我打电话在闲置回调中重新显示,而不是在键盘回调中 – 2011-03-24 02:35:17

回答

0

这里是我的一个项目的一些代码:

bool keyDown[256]; 

... 

//Called when a key is pressed 
void handleKeypress(unsigned char key, int x, int y) { 
    keyDown[key] = true; 
} 

void handleKeyUp(unsigned char key, int x, int y){ 
    keyDown[key] = false; 
} 

这基本上保持每个键的状态的一个数组,所以你可以检查它们各自的时间。那么你不必依赖那些经常出现的回调。

+0

谢谢你,现在看起来很简单,现在我想起它! – 2011-03-23 21:05:12

2

游戏中常见的事情是键盘阵列。因此,您也可以一次按几个按钮。

你有一个数组,你保持键的状态(当你按下时你放1,释放时放0)。而且你只需从数组中获取信息,而不是直接从输入中处理游戏。

+0

谢谢,这是一个很好的答案。看起来很简单! – 2011-03-23 21:04:39