如何减慢我的程序并获得用户输入?

时间:2016-03-09 15:03:07

标签: c++ sfml game-loop

要使用SFML获取用户输入,我使用此功能

char SFMLDisplayManager::handleEvents()
{
  if (sf::Keyboard::isKeyPressed(sf::Keyboard::Z))
    return ('z');
  if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))
    return ('s');
  if (sf::Keyboard::isKeyPressed(sf::Keyboard::Q))
    return ('q');
  if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
    return ('d');
  return (0);
}

然后,为了减慢我的程序,我使用

sf::sleep((sf::milliseconds(150)));

这很好但是当我快速按下某个键时,有时候我没有得到输入。 我想这是因为我在睡觉时按键。

但我不知道如何解决这个问题。

有个主意吗?感谢

2 个答案:

答案 0 :(得分:4)

减少睡眠时间。

如果你的程序在while循环中没有睡眠,它确实需要100%的cpu时间,但是将睡眠值设置为1ms将使它使用大约0%。

修改

通常,将逻辑循环与绘图循环分开(仅在每n ms调用逻辑循环),或根据增量时间(已经过的时间)计算游戏中的所有内容是个好主意。从最后一帧)。

您可以在此处阅读有关游戏循环和sfml的更多信息https://github.com/SFML/SFML/wiki/Tutorial:-Basic-Game-Engine#gameloop

答案 1 :(得分:-1)

您可以使用

避免重复键重复

http://www.sfml-dev.org/documentation/2.0/classsf_1_1Window.php#aef9f2b14c10ecba8a8df95dd51c5bb73

按下事件键。

这可以用于创建例如用户可以写的文本框。