如何减慢我的程序并获取用户输入
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
并抓住按下的事件键。
例如,为了创建一个用户可以在其中编写的文本框,这可能很有用。
相关文章:
- 如何获取用户输入的算术表达式,如 5-8+7*4-8+9 或 1+5?
- C++如何使用表达式获取用户输入?
- 有没有办法获取用户操作系统的ANSI转义码?
- 当PSO细粒度策略对使用AdsGetObject MSDN API的Windows操作系统生效时,如何获取用户密码到期日
- C++ .我正在尝试通过使用开关内的数组来获取用户输入,但是当我运行代码时,它显示分段错误?
- 使用 Firebase 从C++获取用户的电话号码
- 从 R 控制台获取用户输入:Rcpp 和 std::cin
- 如何使用字符串获取用户控制台输入
- 循环以使用 cstring 数组 c++ 获取用户输入
- 尝试获取用户输入和cout消息期望,当我输入一个有效名称时,它将所有这些命名
- 获取用户输入以形成链表
- 尝试编写进程内存并获取用户定义的文字运算符未找到
- 如何使用 C++17 std::文件系统获取用户的主目录?
- C |获取用户输入而无需给出值
- 如何在消息文件中获取用户定义的字段
- 从Windows上的系统工作的服务中获取用户文档文件夹.C++
- 如何阻止 cin.getline() 导致控制台在找不到分隔符时重复获取用户输入?
- C++:获取用户通过cin输入的数据类型
- 如何在C 中使用我的服务来获取用户的SID和用户名
- 结构数组:无需致电并获取用户输入的匹配函数