目前我正在尝试使用sfml libary创建一个行为类似getch()
的函数(暂停直到一个键)。重要的是要注意,这应该在事件循环之外调用。我试过四处寻找类似的东西,但我没有找到任何东西。我目前的代码如下:
int waitForKeyboardHit (sf::Window *win) {
sf::Event event;
while (true) {
while (win->pollEvent (event)) {
if (event.type == sf::Event::KeyPressed) {
return event.key.code;
}
}
}
return -1;
}
虽然大部分工作都很好,但是如果任何KeyPressed事件在调用此函数之前进入事件窗口队列而不是函数立即结束而不是等到下一次键盘按下。在调用此函数之前,我一直在寻找清除窗口事件队列的方法,但我还没有发现任何可以做到这一点的事情。
答案 0 :(得分:2)
while (win->pollEvent(event)) ;
(介意分号)将清除事件队列,但这可能不是你想要的方式:停止整个程序及其输入逻辑很少是好事。我相信,使用某种FSA会更好。就像维基百科的这个例子,机器等待硬币(就像你等待按键):
此外,您应该重新绘制场景并在display()
循环中调用while(true)
,以便至少不时刷新屏幕。