我正在使用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 ++
答案 0 :(得分:0)
如何保存每个帧的先前键状态和当前键状态?这样,您可以测试先前的键状态是否为KEY UP且新键状态是KEY DOWN。这表示已按下该键。您可以将此用于“按下键”功能 - 只需测试以查看先前的键状态是否为KEY DOWN,新键状态是否也是KEY DOWN。 “key up”函数将测试前一个键状态是否为KEY DOWN且新键状态是KEY UP。