[英]OpenGL and SFML Clock not restarting correctly
我目前正在使用OpenGL制作迷宫游戏。
我想创建一个计时器来跟踪用户花费在完成每个迷宫上的时间。 我正在使用SFML时钟来尝试跟踪该时间。
我为第一个迷宫设置了以下内容:maze.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
,还将它与固定大小的char数组一起使用。 尽管在此示例中可能会很好,但这表明存在更深的问题。 在C ++中,您永远都不会找到任何s*printf
函数-根本没有用。 相反,只需使用std::string
。 这将使您能够准确地完成所需的工作,而不会出现任何潜在的问题:
更换:
char timeStr1[100];
char levelStr[100];
sprintf(levelStr, "Level: %d", levelNum);
sprintf(timeStr1, "Time: %.2fs", mazeOneClock.getElapsedTime().asSeconds());
带有:
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
应该是您的默认选项。
阅读内容:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.