sfml 中是否有等同于 getch 的东西?

Is there an equivalent of getch in sfml?

目前,我正在尝试仅使用 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 事件在调用此函数之前进入事件 window 队列而不是函数立即结束而不是等到下一次键盘按下。在调用此函数之前,我已经尝试寻找清除 window 事件队列的方法,但我也没有找到任何可以做到这一点的方法。

while (win->pollEvent(event)) ;(注意分号)将清除事件队列,但这可能不是您想要的方式:停止整个程序及其输入逻辑很少是一件好事。我相信使用某种 FSA 会更好。就像维基百科的这个例子,机器等待硬币(就像你等待按键):

此外,您应该重绘场景并在 while(true) 循环中调用 display() 至少不时地刷新屏幕。