c++ - sfml 中是否有相当于 getch 的东西?

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

最佳答案

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

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

关于c++ - sfml 中是否有相当于 getch 的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38717426/

相关文章:

c++ - 对话框操作中的断言错误

c++ - Makefile 无法编译文件

c++ - 不能使用我自己的使用 SFML 的 DLL

opengl - 一种生成 block 的方法

c++ - "error C2248: ' sf::NonCopyable::NonCopyable ' : cannot access private member declared in class ' sf::NonCopyable '"

c++ - 运行 SFML 图形后看不到新窗口

c++ - 使用 Arduino 上的 atoi 和 itoa 从 int 转换为字节数组然后返回 int 进行传输

c++ - 为什么会出现这个错误? - 段错误(核心已转储)

C++,链接顺序是否标准化?

c++ - 我怎样才能在我的窗口顶部获得空间?