实施重力到弹丸 - 三角洲时间问题

时间:2012-11-05 22:53:58

标签: android projectile

我正在尝试在Android中实现一个简单的射弹运动(使用openGL)。 而且我想在我的世界中增加引力来模拟球的逼真下降。

我只是使用以下计算的增量时间更新我的渲染器:

    float deltaTime = (System.nanoTime()-startTime) / 1000000000.0f;
    startTime = System.nanoTime();

    screen.update(deltaTime);

在我的screen.update(deltaTime)方法中:

    if (isballMoving) {
        golfBall.updateLocationAndVelocity(deltaTime);
    }

golfBall.updateLocationAndVelocity(deltaTime)方法中:

public final static double G = -9.81;

double vz0 = getVZ0(); // Gets initial velocity(z)
double z0 = getZ0();  // Gets initial height
double time = getS();  // gets total time from act begin
double vz = vz0 + G * deltaTime;  // calculate new velocity(z)
double z = z0 - vz0 * deltaTime- 0.5 * G * deltaTime* deltaTime; // calculate new position

time = time + deltaTime; //  Update time
setS(time); //set new total time

现在问题在于此;

  • 如果我将deltaTime静态设置为0.07,则动画会正常运行。但由于update()方法的运行速度尽可能快,因此球的长度和速度因设备而异。

  • 如果我不触摸deltaTime并运行程序(deltaTime与我的测试设备之间的差值在0.01 - 0.02之间),动画长度和球的速度在不同设备上是相同的。但是动画太慢了!

我做错了什么?

1 个答案:

答案 0 :(得分:1)

增加每帧更改的金额?这应该会使你的动画速度提高5倍:

double vz = vz0 + G * deltaTime * 5;  // calculate new velocity(z)
double z = z0 - vz0 * deltaTime- 0.5 * G * deltaTime* deltaTime * 5; // calculate new position