我无法让我的函数计算过去了多少时间并相应地打印东西


bool IsGameEnded()
{
static int i = 0;
i++;
if (i == 10)
return true;
return false;
}
int main()
{
bool GameEnd = false;

float ElapsedTime = 0;
while(!GameEnd)
{
chrono::steady_clock::time_point StartingTime = chrono::steady_clock::now();

if (ElapsedTime > 10)
{
ElapsedTime = 0;
draw();
}
GameEnd = IsGameEnded();

chrono::steady_clock::time_point EndingTime = chrono::steady_clock::now();
ElapsedTime = ElapsedTime + chrono::duration_cast<chrono::milliseconds>(EndingTime - StartingTime).count();
}
return 0;
}

我不想玩蛇游戏。它将以时间为基础。例如,屏幕将每5秒左右更新一次。为此,我使用了chrono库。我不习惯这种尝试,所以我可能错过了一些显而易见的东西。但问题是主函数没有进入if块。因此,它不会在控制台上绘制任何内容。

我试着调试(逐行运行(。它实际上不像一个正在运行的程序,因为时间间隔会变长,但每次都会进入if块。此外,如果我将if条件设置为2纳秒,它也可以工作,但由于cout函数不能打印得这么快,我需要它比这长得多。在调试时,我也意识到";开始时间";以及";结束时间";变量不会被启动(除非我直接停止(。有趣的部分是Ifı在If块之后添加cout,过一段时间程序开始进入If块。

当你这样做时:

chrono::duration_cast<chrono::milliseconds>(EndingTime - StartingTime).count();

时间不够,毫秒计数总是返回0。这意味着您总是将0添加到ElapsedTime,并且它永远不会超过10。

一个解决方案是使用较小的分辨率:

chrono::duration_cast<chrono::nanoseconds>(EndingTime - StartingTime).count();

正如您在问题中提到的,并适当调整if条件。

然而,最好的解决方案是将ElapsedTimefloat更改为chrono::duration(适当单位(,因为这是变量所代表的单位。这样可以避免在持续时间上执行.count()

最新更新