【发布时间】:2011-07-09 19:04:57
【问题描述】:
我正在使用 Freeglut 设计一些基本游戏。但是,我在键盘输入方面遇到了一些问题。
在我之前制作的一些游戏中,我做过这样的事情:(伪代码)
class Key {
bool pressed;
void press() {pressed = true;}
void release() {pressed = false;}
bool isPressed() {return pressed;}
}
Key wkey, skey;
handleKeypress(unsigned char key, int xf, int yf) { //This is the function that glutKeyBoardFunc gets
switch(key) {
case 'w':
wkey.press();
case 's':
skey.press();
}
}
handleKeypress(unsigned char key, int xf, int yf) { //This is the function that glutKeyBoardUpFunc gets
switch(key) {
case 'w':
wkey.release();
case 's':
skey.release();
}
}
当我想检查是否按下了某个键时,我检查了wkey.isPressed()。但是,这引起了问题。例如,Esc 键应该暂停游戏,然后从暂停屏幕按 Esc 应该将用户带到主菜单。但是,按下 Esc 会直接将用户带到主菜单,因为用户没有在主循环的那个刻度中释放退出键。
为避免此类问题,使用 Freeglut 进行(和使用)键盘输入的最佳方式是什么?
编辑:顺便说一下,这是 C++
【问题讨论】:
-
最好的方法是使用 GLUT 以外的东西(几乎任何东西)。 GLUT 可以快速演示“这就是这个 OpenGL 函数的作用”,但除此之外,最好避免使用它,至少在 IMO 中是这样。
-
我一直在研究将 PLIB 与 GLUT 并排使用。这似乎是一个更好的主意吗?
-
我没有尝试过,但我的第一反应是,如果它仍然涉及 GLUT,它可能仍然是一个非常糟糕的主意。您可能需要考虑一些 GLUT 的替代品,例如我在 previous answer 中发布的一些。
-
我已经开始关注 GLFW,我似乎比 GLUT 更了解它。感谢您的帮助!
标签: c++ keyboard user-input glut freeglut