为了获得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
关于c++ - 如何减慢程序速度并获得用户输入?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35895185/