我应该将游戏逻辑放在绘图循环中吗?

Should I put the game logic inside the draw loop?

我正在使用 CSFML 制作一个简单的游戏,想知道我是否可以让我的代码更有效率。

现在主函数的游戏循环中的代码如下所示:

    // game logic
    for (int i = 0; i <= perf.arramount; i++)
    {
        UpdateBody(&body[i]);
    }


    // clear
    sfRenderWindow_clear(window.window, window.bg);
    

    // draw
    for (int i = 0; i <= perf.arramount; i++)
    {
        sfRenderWindow_drawRectangleShape(window.window, body[i].rect, NULL);
    }

    // display
    sfRenderWindow_display(window.window);

我被告知要按顺序做事:逻辑、清晰、绘制、显示。但是,像这样将逻辑放入绘制循环中会不会有任何问题?

    // clear
    sfRenderWindow_clear(window.window, window.bg);

    // draw
    for (int i = 0; i <= perf.arramount; i++)
    {
        UpdateBody(&body[i]);
        sfRenderWindow_drawRectangleShape(window.window, body[i].rect, NULL);
    }

    // display
    sfRenderWindow_display(window.window);

它会减慢绘制调用速度还是提高代码效率?

我不确定这个特定的库是否与其他库不同,所以即使是一般性的回答也很感激。

如何构建游戏是您的设计决策。
您将是第一个注意到问题的人。
但这是我的经验。我了解到,在游戏逻辑循环中你有一些绝对需要的计算,它们也往往需要关于已经过了多少时间的信息。在绘图循环中,您只需要可视化计算结果。一旦您要拆分成线程,计算和可视化需求的时间就会改变。您可能希望比绘制更频繁地进行计算,而您希望始终完整地绘制(除了更高级的基于 FPS 的细节渲染级别....)。
因此,有多个方面可能会让您想要将这两件事分开。
我所做的是有一个计算步骤(根据我的设计,它获取实时信息作为经过秒数的参数)和一个单独的绘图步骤。这样你 可以 将它们放在一个父循环中,但你可以在任何时候自由移动它们并且你可以保护自己不会混淆这两个步骤。