将增量时间(以秒为单位)转化为速度

Implementing Delta Time (In Seconds) into Velocity

使用 C++、SDL2 和 Vulkan,我正在尝试通过将移动速度乘以增量时间来在我的游戏移动中实现增量时间,如下所示:

velocity += speed * dt;

我在下面得到这段代码,它显然计算了增量时间 dt,但我不太了解它以及我需要修改哪些内容才能更新 [=13] =] 像素每秒。

编辑:SDL_GetTicks() returns 当前时间(以毫秒为单位)。

deltaTime = (SDL_GetTicks() - lastTime) * (TARGET_FPS / 1000.f);

if (deltaTime > TARGET_DELTATIME)
    deltaTime = TARGET_DELTATIME;
    
lastTime = SDL_GetTicks();

使用给定的 TARGET_FPS(现在假设为 60)和每秒 50 像素的 speed,我如何才能正确更新 velocity

永远不要改变速度,而是让你的物理计算包括增量时间作为一个组成部分。一般来说,乘以(delta_since_last_frame/arbitrary_constant_you_tune).

编辑* 例如: 位置 += 速度 * (delta * ARBITRARY_TUNING_CONSTANT);将 ARBITRARY_TUNING_CONSTANT 设置为 TARGET_FPS/1000.0f 很诱人,您可以这样做,但是将其设置为任何可以让您将速度值设置为您感觉直观的值的值。

定义一种基本速度值,例如,假设您想要 10.0 的速度来表示以每秒 50 像素的速度移动。然后设置 arbitrary_constant_you_tune 使之成立。 (任意常量始终为 CONSTANT,只需在程序初始化或配置期间设置一次)。此外,一旦您真正用代码编写它,请使用乘法而不是除法(例如,更喜欢 0.2 到 1/5),因为乘法计算速度更快。

对此有一个细微差别:请注意,如果您以像这样的简单方式使用增量时间,那么对于不同帧速率的人,游戏物理会略有不同。例如,最大跳跃高度会有所不同,2 个游戏 运行 side-by-side 以不同的帧速率将显示不同的事件过程等。在调整游戏物理和游戏逻辑时请注意这一点