gpt4 book ai didi

c++ - 游戏引擎中的运动是如何工作的

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:47 32 4
gpt4 key购买 nike

   //Calculate time step
float timeStep = stepTimer.getTicks() / 1000.f;

//Move for time step
dot.move( timeStep );

//Restart step timer
stepTimer.start();

这段代码取自 Lazy Foo 的 SDL 教程,应该会生成一个基于可变时间步长的运动系统。我对此的主要问题是它是如何工作的? float timeStep = stepTimer.getTicks()/1000.f; 计算耗时。因此,如果假设自上次移动调用以来已过去 2 毫秒,则 timeStep var 将为 0.02 秒。这怎么可能在代码中使用?如果我有每秒 10 像素的恒定速度,并且我想让该速度适用于任何帧率,我必须将我的 px/s 乘以该值 (0.02)。

然而,这将导致以下 posx += 10*0.02。正如我们刚刚了解到的,这意味着我们将位置增加 0.2 像素的值(这当然不会起作用,它只会降低值)。

我在这里错过了什么?

最佳答案

您在代码中维护一个位置变量;一个浮点值,它是精确的并且可以接受微小的变化,小到有效位数(对于 32 位 float 大约为 7,对于 64 位 float 大约为 14)。

然后你从那里画到屏幕上。

有一段时间,它会被转换(或者说四舍五入)为一个像素,一段时间后转换为相邻像素,等等。

您的错误在于您使用(或以这种方式解释)像素地址作为位置数据。屏幕只有非常有限的“数字空间”。考虑仅使用 0 到 2000 之间的整数进行任何数学运算。不会带你走得太远。

关于c++ - 游戏引擎中的运动是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36534625/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com