Я использую 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 сразу привело пользователя в главное меню, поскольку пользователь не отпускал клавишу escape в этом тике основного цикла.
Чтобы избежать подобных проблем, как лучше всего использовать (и использовать) ввод с клавиатуры с помощью Freeglut?
РЕДАКТИРОВАТЬ: Кстати, это C ++