繁体   English   中英

如何减慢程序速度并获得用户输入?

[英]How to slow down my program and getting user input?

为了获得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

并捕获按下的事件键。

这对于创建例如用户可以在其中书写的文本框很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM