【问题标题】:Is there an equivalent of getch in sfml?sfml 中是否有类似的 getch?
【发布时间】:2016-12-07 15:08:00
【问题描述】:

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

【问题讨论】:

    标签: c++ sfml


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 2010-11-01
      相关资源
      最近更新 更多