我正在制作游戏,需要弄清楚物体落到一定高度需要多长时间。
物体有一个初始y值(y),一个初始垂直速度(vy),一个重力常数(重力),以及它应该下降的垂直目标距离(目的地)。
我可以用循环来解决这个问题:
int i = 0;
while(y < destination) {
y += vy;
vy += gravity;
i++;
}
return i;
唯一的问题是我需要为几百个对象做这个,我必须每帧都这样做。
有没有办法用某种公式计算出来?这样我就可以加速我的游戏,同时还能解决这个问题。
由于
答案 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个颗粒,效果很好。