我正在与我申请重力一个对象的简单应用..速度基于时间,而不是FPS
我不希望对象走得太快/太慢当FPS率的变化,所以我四处寻找一种方法来做到这一点,我发现我需要将运动的速度乘以德尔塔时间..
所以我决定去为它,但我碰到了更多比我的预期..
在游戏循环的问题我有这样的:
gravityRate = 0.02;
velocity.y += gravityRate;
objectPosition.y -= velocity.y;
这当然受到了游戏的fps的影响。
我希望对象移动0.02个单位16毫秒,
所以,我试图修复它,像这样:
velocity.y += (gravityRate * (delta * 1000.0))/(1000/60);
虽然三角洲* 1000给我传递的毫秒量..
到目前为止,它似乎能够正常工作,并且物体以相同的速度移动,即使在较低的FPS上,它也会跳出更大的间隙,但这很好。
问题是我想在某些场合跳回来。如碰撞等, 我曾经通过简单地做这样的事情: velocity.y = -0.05;
但现在这不起作用,它工作正常,但它再次依靠fps。 在较高的FPS率下跳高,在低FPS率下较低。我认为这可能是因为多次呼叫会聚并降低速度超过预期,但情况并非如此,它只运行一次。)
我一直在试图解决它一段时间,但我不断收到更多的问题,因为我去..所以我真的很感谢所有帮助
谢谢
这也取决于你用作3d/2D显示器的内容,以及你用来渲染它的内容。这就是说你可以不预先计算位置/速度/加速度的值,然后根据这些值呈现时间轴? – Nomad101 2013-04-29 00:39:46
@ Nomad101我有一种感觉,我会遇到同样的问题,我会用这种方式去做,我有一种感觉,为了让它跳跃,我需要改变我做的方式,但我不能为此提出一个想法,并且可以扩展关于预计算的内容吗?我不知道我看到你要去哪里,这个 – Radicate 2013-04-29 00:45:44
好吧,从我收集的东西中,你试图对物体进行动画模拟重力。这就是说你动画的对象高度依赖于你如何渲染它。至于预先计算,我的意思是你可以根据你的重力和任何你想实现的碰撞创建一个对象的地图。一旦生成地图,您可以基于此进行渲染,并且您将在应该出现的时候确切地返回它应该在的位置。 – Nomad101 2013-04-29 00:48:20