我无法让我的函数计算已经过去了多少时间并相应地打印内容
I can't make my function calculate how much time has passed and print stuff accordingly
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 库。我不习惯尝试学习它,所以我可能错过了一些明显的东西。但问题是 main 函数没有进入 if 块。所以它没有向控制台绘制任何内容。
我试过调试(运行 一行一行)。它实际上不像 运行 程序,因为时间间隔变长,但它每次都进入 if 块。此外,如果我将 if 条件设置为 2 纳秒,它也可以工作,但由于 cout 函数不能打印得那么快,我需要它比这长得多。在调试时我还意识到“StartingTime”和“EndingTime”变量不会启动(除非我直接停止它们)。有趣的部分是 If ı 在 if 块之后添加 cout,一段时间后程序开始进入 If 块。
当你这样做时:
chrono::duration_cast<chrono::milliseconds>(EndingTime - StartingTime).count();
时间不够,毫秒数总是 returns 0。这意味着你总是在 ElapsedTime
上加 0,它永远不会超过 10。
一个解决方法是使用较小的分辨率:
chrono::duration_cast<chrono::nanoseconds>(EndingTime - StartingTime).count();
如题中所述,适当调整if
条件。
但是,最好的解决方法是将 ElapsedTime
从 float
更改为 chrono::duration
(适当的单位),因为这是变量表示的单位。这也可以让您避免在持续时间内执行 .count()
。
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 库。我不习惯尝试学习它,所以我可能错过了一些明显的东西。但问题是 main 函数没有进入 if 块。所以它没有向控制台绘制任何内容。
我试过调试(运行 一行一行)。它实际上不像 运行 程序,因为时间间隔变长,但它每次都进入 if 块。此外,如果我将 if 条件设置为 2 纳秒,它也可以工作,但由于 cout 函数不能打印得那么快,我需要它比这长得多。在调试时我还意识到“StartingTime”和“EndingTime”变量不会启动(除非我直接停止它们)。有趣的部分是 If ı 在 if 块之后添加 cout,一段时间后程序开始进入 If 块。
当你这样做时:
chrono::duration_cast<chrono::milliseconds>(EndingTime - StartingTime).count();
时间不够,毫秒数总是 returns 0。这意味着你总是在 ElapsedTime
上加 0,它永远不会超过 10。
一个解决方法是使用较小的分辨率:
chrono::duration_cast<chrono::nanoseconds>(EndingTime - StartingTime).count();
如题中所述,适当调整if
条件。
但是,最好的解决方法是将 ElapsedTime
从 float
更改为 chrono::duration
(适当的单位),因为这是变量表示的单位。这也可以让您避免在持续时间内执行 .count()
。