【问题标题】:How to slow down my program and getting user input?如何减慢我的程序并获得用户输入?
【发布时间】:2016-03-09 15:03:06
【问题描述】:

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

这很好用,但是当我快速按下一个键时,有时我没有得到输入。 我想这是因为我在睡眠期间按了他们的键。

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

有想法吗?谢谢

【问题讨论】:

  • 您应该阅读 SFML 教程。如果你像你所知道的那样处理时间管理,你总会遇到问题。您需要使用另一种方法。说真的,阅读教程,它们很好。

标签: c++ sfml game-loop


【解决方案1】:

减少睡眠时间。

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

编辑

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

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

【讨论】:

  • 我不能减少睡眠时间,如果我这样做,我的游戏会太快。
  • 你不应该以相同的速度处理逻辑图形和输入。逻辑应该在一个固定的时间间隔内完成,尽可能快地输入。图形应该固定在某些 fps 或推到极限。
  • 我不明白如何将逻辑图形速度和输入速度分开。
【解决方案2】:

您可以使用

避免键重复

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

并捕捉按下的事件键。

这对于创建一个用户可以书写的文本框很有用。

【讨论】:

  • 请在此处添加一些代码 - 仅提供链接不是答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 2022-12-22
  • 1970-01-01
  • 2010-12-22
相关资源
最近更新 更多