我为游戏编写了MVP。但是现在我想添加一个秒表,以便玩家可以在游戏的左下角或右下角看到倒计时。这不是关于如何创建这样的秒表的问题,而是关于如何将其包含在我的游戏中。
我已经想出如何将时钟数字渲染到屏幕上,但问题是当我使用任何输入触发时钟时游戏仍然停留在时钟循环中。这里有一些代码可以解释:
// when the player makes her first input the clock is triggered
if (!CLOCK)
this->clockStatus(ON);
// within the clockStatus function
void Game::clockStatus(TimerState Status)
{
do { /* Infinite Loop */
t2->getTimefromSeconds(getCurrentSysTime());
break;
} while (1);
while (1) { /* Another infinite loop */
t_inter->getTimefromSeconds(getCurrentSysTime());
t1 = (Timer*)(t_inter - t2);
}
}
t1的输出通过以下方式显示:
t1.display();
为清楚起见,TimeState是一个管理秒表状态的枚举。(ON / OFF)计时器是实际的秒表类。
经过研究我得出的结论是,当玩家第一次进入游戏时,会触发秒表,我应该为此创建一个新线程。这样主要功能可以正常运行,辅助线程可以计算游戏时间。有没有关于如何实现这个的教程或pdf或练习?此外,欢迎所有有用的建议。
答案 0 :(得分:1)
根据我的理解,您希望能够启动秒表,然后显示自启动以来经过的时间。最简单的方法是存储开始时间,然后(在正常的渲染循环中)找到与当前时间的差异。你可以使用这个助手类:
#include <chrono>
inline auto currentTime() {
return std::chrono::high_resolution_clock::now();
}
struct Timer {
Timer() { reset(); }
void reset() { // reset the stopwatch to 0
startTime = currentTime();
}
double getElapsed() { // get the elapsed time (in seconds)
return std::chrono::duration_cast<std::chrono::nanoseconds>(
currentTime() - startTime
).count() / 1000000000.0;
}
std::chrono::time_point<std::chrono::steady_clock> startTime;
};
使用示例:
// global
Timer stopwatch;
// when the player does first input (or whenever)
stopwatch.reset();
// in your loop
double stopwatchSeconds = stopwatch.getElapsed();
// display the value...