我正在尝试在 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 之间)动画长度和球的速度在不同的设备上是相同的。但是动画太慢了!
我究竟做错了什么?