2016-08-02 38 views
2

目前我正在尝试创建一个函数,其行为像getch()(暂停,直到一个键是它)只使用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事件的前此功能的事件窗口排队去被调用,而不是函数立即结束,而不是等到下一个键盘按下。我试图寻找方法来清除窗口的事件队列之前调用这个函数,但我还没有找到任何可以做到这一点。

回答

1

while (win->pollEvent(event)) ;(记住分号)会清除事件队列,但这可能不是你想要做的事情:拖延整个程序及其输入逻辑很少是件好事。我相信,使用某种FSA会更好。像维基百科所在的机器等待硬币(像你等待一个按键)这个例子:image

此外,你应该重新绘制场景,并呼吁display()while(true)循环至少从时间刷新屏幕时间。

相关问题