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 の間です)、アニメーションの長さとボールの速度は異なるデバイスで同じです。しかし、アニメーションはとても遅いです!
私は何を間違っていますか?