抛射物距离/时间

时间:2011-07-20 20:19:17

标签: time physics distance motion

我正在制作游戏,需要弄清楚物体落到一定高度需要多长时间。

物体有一个初始y值(y),一个初始垂直速度(vy),一个重力常数(重力),以及它应该下降的垂直目标距离(目的地)。

我可以用循环来解决这个问题:

int i = 0;
while(y < destination) {
    y += vy;
    vy += gravity;
    i++;
}
return i;

唯一的问题是我需要为几百个对象做这个,我必须每帧都这样做。

有没有办法用某种公式计算出来?这样我就可以加速我的游戏,同时还能解决这个问题。

由于

4 个答案:

答案 0 :(得分:1)

您可以使用基本物理(运动学)明确地解决这个问题。

给定初始速度v,恒定加速度a和固定距离x,时间为:

(1/2)at ^ 2 + vt - x = 0

at ^ 2 + 2vt - 2x = 0

解决二次方程式并取正时间。

答案 1 :(得分:1)

在初始(垂直)速度 v 和加速度(由于重力)的情况下,您想知道距离 d 所需的帧数一个

n 帧之后,行进的距离是

  

vn +Σ(0≤ j &lt; n aj = vn an n -1)

所以设置 d = vn n -1)并解决 ñ

  

d = vn an n -1)
  ∴½ 2 + n v - ½ a ) - d = 0

然后使用二次公式得到 n

  

n =(½ a - v ±√(( v - ½ a < / em>) 2 - 2 ad ))/ a


其他一些答案已经提到了牛顿运动方程的常用解法,但这些只适用于连续方程。你有一个离散模拟,所以如果你想要准确而不是近似的答案,那么你需要总和而不是积分,如上所述。

我第一次写这种预测代码是在一场涉及坦克相互发射炮弹的游戏中。为了帮助瞄准,游戏在地面上绘制了一个目标标线,在预测的位置,贝壳将降落。对于我的第一次尝试,我使用了连续运动方程的常规解,结果还有很长的路要走。模拟的离散性对结果产生明显的影响,对于某些应用(如绘制目标网格),预测和模拟之间的一致性至关重要。

答案 2 :(得分:0)

答案 3 :(得分:0)

The only problem with this is that I need to do this for several hundred objects and I have to do it every frame.

我认为如果性能对您来说至关重要,那么包含大量*^的公式可能不适合您的情况。

我不知道你的目的是什么,你是否需要模拟是否准确,但我认为你可以查看Particle System。虽然它只是一种通用方法,并且不会直接加速您的程序,但是在该领域中有许多研究可能会有用。另外,您可以阅读this以了解更多信息。

此外,由于您的方法仅使用+,我相信它非常有效。除非您的对象真的难以呈现,否则几百个不会成为问题。大多数公式可能会使您的程序看起来更好,但效果不佳。仅供参考,我曾经在一台非常古老的机器上渲染了近10000个颗粒,效果很好。