如何减慢我的程序并获取用户输入?
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
并捕获按下的事件键。
这对于创建用户可以书写的文本框等非常有用。
为了使用 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
并捕获按下的事件键。
这对于创建用户可以书写的文本框等非常有用。