这里的问题是你在物理上犯了一个错误!但这没关系,因为它很容易解决。
在精灵位置调用更新方法时,应首先设置加速度。我假设这个游戏的重力是一个常数,所以你只需要设置一次。(-9.81,或类似的东西。)
然后,您希望通过速度 = old_velocity + 加速度 * 时间来更新角色在 y 方向上的速度。
完成此操作后,您然后以类似的方式更新位置:位置 = old_position + 速度 * 时间。
仅当 delta 是总经过时间而不是时间步长时,您用于更新位置的等式才有效!(我假设 delta 是一个时间步长,因为这就是物理游戏通常的编程方式。)
我希望这有帮助!如果您想了解更多信息,请查看 suvat 方程,如果您知道初始速度和恒定加速度,您可以计算最终位置,因为您的游戏在跳跃和碰撞时速度会发生变化,所以它不现实也就不足为奇了!有更多问题,请发表评论,我会尽力为您提供进一步的帮助。
编辑:我重新编程了你在这里所做的一些使用 OpenGL 绘制的框。您更新职位的方法似乎不起作用。如果 or 时间步长为 1.0d,这些框似乎只会正确落下dt
,我不知道为什么。然后,当它们与某物发生碰撞时,它们会一起停止而不是弹跳。我不确定究竟是为什么。
但是,屏幕上还有另一个使用我描述的物理原理的框:
v = u + a*t
并且s = s_last + v*t
该框完全按照预期落下并正确反弹。由于简化,能量在弹跳中损失。