我正在使用我在其上应用重力的对象制作一个简单的应用程序。
当 fps 速率发生变化时,我不希望对象走得太快/太慢,所以我四处寻找一种方法来做到这一点,我发现我需要将移动速度乘以 delta时间..
所以我决定去做,但我遇到的问题比我想象的要多。。
在游戏循环中,我有这个:
gravityRate = 0.02;
velocity.y += gravityRate;
objectPosition.y -= velocity.y;
这当然会受到游戏fps的影响。
我希望对象每 16 毫秒移动 0.02 个单位,
所以我试着像这样修复它:
velocity.y += (gravityRate * (delta * 1000.0) ) / (1000 / 60);
虽然 delta * 1000 给了我经过的毫秒数..
到目前为止一切都很好,它似乎工作正常,并且对象以相同的速度移动,即使在较低的 FPS 上它会跳跃更大的间隙,但这很好。
问题是我希望对象在某些情况下跳回。比如碰撞左右,我曾经通过简单地做这样的事情来实现这一点:velocity.y = -0.05;
但是现在这不起作用,它确实起作用了,但它再次依赖于 fps。它在较高的 FPS 速率上跳得更高,在低 FPS 速率下跳得更低。(我认为这可能是因为多个调用聚集并降低速度超过预期,但事实并非如此,它只运行一次。)
我一直在尝试解决它一段时间,但我不断遇到更多问题..所以我真的很感激任何帮助
谢谢