我无法让我的函数计算已经过去了多少时间并相应地打印内容

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条件。

但是,最好的解决方法是将 ElapsedTimefloat 更改为 chrono::duration(适当的单位),因为这是变量表示的单位。这也可以让您避免在持续时间内执行 .count()