我正在使用 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++