为Java创建精确的引力

时间:2013-10-29 17:59:09

标签: java

我的视图是600像素高,有12个盒子,每个50像素乘50像素。我根据重力创建了一个用户点击的球。我这样做是为了进行物理演示,我试图让它尽可能准确。目前,我使用的比例使用四个盒子(或200像素)作为一米。计算“y”位置的方法每秒调用50次(50 fps)。当我尝试使用此代码运行程序时,它会在相当长的时间内关闭。

这是我打电话来更新职位的方法:

public double calcY()
{
    velocity += acceleration*200/2500;
    return(getY()-velocity);
}

我将乘以200将米转换为像素。 除以2500,因为它每秒被调用50次,所以(50)^ 2是2500。

现在它并没有太多关闭。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

您的计算永远不应该与固定的帧速率相关联,度量已经过期的实时。 FPS可以并且会因您无法控制的因素而有很大差异。

您可以使用System.currentTimeMillis()跟踪调用calcY()之间的时间 - 两次调用之间可能会有几毫秒的时间,但在多次调用之间它会非常精确。

上次我检查下降加速度不是每秒一米,而是9.81米/秒。所以你的计算加速度似乎偏差了9.81。

编辑:再看一下你的公式,对我来说毫无意义。

答案 1 :(得分:0)

你应该从运动运动方程开始。

x = x0 + v0*t + 1/2*a*t^2

加速时间平方具有位置单位。这里的t是绝对时间。如果你想逐帧计算位置。

v = v0 + a*dt
x = x0 + v0*dt + 1/2*a*dt^2

这里每次计算最终位置和速度,并将其用作下一帧的初始位置和速度。