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

How to slow down my program and getting user input?

本文关键字:获取 用户 输入 程序 何减慢 我的      更新时间:2023-10-16

要使用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)));

这工作正常,但是当我快速按下某个键时,有时我无法获得输入。我想发生这种情况是因为我在睡眠期间按下它们键。

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

有想法 ?谢谢

减少睡眠时间。

如果您在没有睡眠的情况下将程序置于 while 循环中,则确实会占用 100% 的 CPU 时间,但将睡眠值设置为仅 1ms 将使其使用它约 0%。

编辑

一般来说,最好将逻辑循环

与绘图循环分开(仅每n ms调用一次逻辑循环),或者根据增量时间(从最后一帧经过的时间)计算游戏中的所有内容。

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

您可以使用以下方法避免键重复

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

并抓住按下的事件键。

例如,为了创建一个用户可以在其中编写的文本框,这可能很有用。