我正在尝试在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之间),则动画长度和球速在不同设备上相同。但是动画太慢了!


我究竟做错了什么?

最佳答案

增加每帧更改的数量?这将使动画速度提高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

关于android - 对射弹实现重力-三角洲时间问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13241700/

10-13 04:38