OpenGL和SFML时钟未正确重新启动
OpenGL and SFML Clock not restarting correctly
我目前正在使用OpenGL进行迷宫游戏。
我想创建一个计时器,以跟踪用户花费完成每个迷宫的时间。我正在使用SFML时钟来跟踪这段时间。
我对第一个迷宫设置了以下设置:迷宫。draw((;
if(mazeOneIteration == 1){
mazeOneIteration++;
mazeOneClock.restart();
}
char timeStr1[100];
char levelStr[100];
sprintf(levelStr, "Level: %d", levelNum);
sprintf(timeStr1, "Time: %.2fs", mazeOneClock.getElapsedTime().asSeconds());
//std::cout << timeStr1 << std::endl;
std::cout << mazeOneClock.getElapsedTime().asSeconds() << std::endl;
glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(glm::mat4(1.0)));
box.draw();
text.setFontSize(20);
text.draw("User: zsloan112" , 20, 15);
text.draw(levelStr, getSize().x - 100, getSize().y - 20);
text.draw(timeStr1, 20, getSize().y - 20);
由于这是在我的游戏循环中运行的,此代码块每秒运行60次,因此我只能重新启动并将时钟设置为0,因此第一次运行,因此IF语句重新启动时钟。
我的问题是,当我使用sprintf
将时间插入timeStr1
并显示时间为0秒时。
第一次执行此块,然后继续计数时间?
我将在您的代码上向您提供一些批评。我在申请工作并向我展示此代码的地方,我不会雇用您。
您使用sprintf
。这是一个特别糟糕的信号。您不仅使用sprintf
,还使用固定尺寸的字符阵列。虽然在此示例中可能会很好,但它表明了一个更深的问题。在C 中,您应该永远不要找到任何s*printf
函数 - 根本没有用。而是使用std::string
。如果没有任何潜在问题,它将允许您确切地完成所需的工作:
替换:
char timeStr1[100];
char levelStr[100];
sprintf(levelStr, "Level: %d", levelNum);
sprintf(timeStr1, "Time: %.2fs", mazeOneClock.getElapsedTime().asSeconds());
with:
auto const levelStr = "Level: "s + std::to_string(level);
auto const timeStr1 = "Time: "s + mazeOneClock.getElapsedTime().asSeconds();
第二,查看std::chrono
。不是因为它更好,而是因为它是标准库的一部分。SFML来自std::chrono
存在之前,因此它具有自己的时钟也就不足为奇了,但是当您没有理由不理时,您应该坚持使用标准库。
当您尝试测量经过的时间时,std::chrono::steady_clock
应该是您的默认选项。
要阅读的东西:
- http://en.cppreference.com/w/cpp/string
- http://en.cppreference.com/w/cpp/chrono/steady_clock
相关文章:
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- 如何使用 ctypes 停止和重新启动从 Python 运行的C++代码
- 重新启动后,线程无法在 while 循环中再次运行
- 在程序和基于文本的游戏和C++内重新启动程序
- 在程序/基于文本的游戏/C++内重新启动程序
- 为什么使用 exec() 重新启动程序不能正常工作?
- 即使在我关闭应用程序并重新启动它后,如何保持我的 ID 被阻止?
- 有没有办法在不重新启动或注销的情况下加载游标?
- IO服务重新启动后,Boost最后期限计时器持续触发
- 在C++中重新启动随机数序列
- 稍后在构造函数中重新启动异常指令删除此指令
- 如何获取代码::块以在代码::块重新启动后保持库的配置?
- 我想在我设置的几秒钟后重新启动我的程序
- 如何使重新启动此循环,当用户输入 1 时,并在 0 时停止
- UDP 服务器每 5 秒重新启动一次
- 有没有办法检查内存缓存是否已重新启动?
- (Windows 10) 在不更新的情况下重新启动C++
- Live555MediaServer 在每个新连接时重新启动流。为什么将"reuseSource"设置为 true 无法按预期工作?
- OpenGL和SFML时钟未正确重新启动
- 无论如何,是否可以确定MFC应用程序是通过PC重新启动或用户单击应用程序快捷方式开始的