Я использую 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?
РЕДАКТИРОВАТЬ: Кстати, это С++