You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在raylib中正确使用deltaTime?请验证我的代码实现

在raylib中正确使用GetFrameTime()实现DeltaTime的方法

你当前的写法是不正确的,问题出在float dt = GetFrameTime()*GetFPS();这一行。

GetFrameTime()本身就是我们需要的deltaTime,它返回的是上一帧到当前帧的时间间隔(单位:秒),核心作用是让游戏逻辑(比如物体移动)不受帧率波动影响。你乘以GetFPS()之后,相当于把dt固定成了1(比如60FPS时,GetFrameTime()≈1/60,乘以60就是1),这样deltaTime的作用完全失效,移动速度又会和帧率绑定——帧率越低,物体每秒移动的距离就越少。

正确用法

直接使用GetFrameTime()作为dt值,不需要额外乘以FPS:

#include <raylib.h>

int main(void)
{
    InitWindow(800, 450, "sample");

    Rectangle rec = {100, 100, 50, 50};

    SetTargetFPS(60);
    while (!WindowShouldClose())
    {
        // 直接获取帧间隔时间作为deltaTime
        float dt = GetFrameTime();

        if(IsKeyDown(KEY_RIGHT))
            // 5是每秒移动的像素数,乘以dt得到当前帧应移动的距离
            rec.x += 5 * dt;

        BeginDrawing();
            ClearBackground(BLACK);
            DrawRectangleRec(rec, RED);
        EndDrawing();
    }
    CloseWindow();

    return 0;
}

修改后,不管实际帧率是60、30还是其他数值,矩形每秒都会稳定移动5个像素,保证了不同设备或负载下的速度一致性。

内容的提问来源于stack exchange,提问作者Ankur Mallick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:22:16