目前,我正在尝试仅使用 sfml 库创建一个行为类似于 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 事件进入事件窗口队列,而不是该函数立即结束,而不是等到下一次按下键盘。我尝试在调用此函数之前寻找清除窗口事件队列的方法,但我也没有找到任何可以做到这一点的方法。
最佳答案
while (win->pollEvent(event)) ;
(注意分号)将清除事件队列,但这可能不是您想要的方式:停止整个程序及其逻辑对于输入来说很少是一件好事。使用某种FSA我相信会更好。就像维基百科上的这个例子一样,机器等待硬币(就像等待按键一样):
此外,您应该重新绘制场景并在 while(true)
循环中调用 display()
来至少时不时地刷新屏幕。
关于c++ - sfml 中是否有相当于 getch 的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38717426/