それで、私はちょうど演習として、opengl を使用して Java で小さなデモ プログラムを作成してきました。getTime(); を実装するまでは、すべてうまくいっていました。および getDelta(); 各フレームにかかる時間を計算する関数。次に、速度に getDelta(); を掛けて、すべての移動計算に適用しました。フレームがランダムにわずかにドロップし、getDelta(); わずかに大きい値を返します。私の計算は、計算が計算する動きの範囲内にあるが正しくない、本当に奇妙な値を出力し始めます。正確な位置からでも正常に続行します。getDelta(); 以来、これを引き起こす原因がわかりません。適切に機能しているようですか?
いくつかのコードを次に示します。
private void movementCalculations(double delta) {
sinInc += 0.0015;
sinInc2 += 0.010;
xMove[0] = xSpeed * (float) Math.sin(Math.toDegrees(sinInc / 100 * delta)) * 7500;
yMove[0] = ySpeed * (float) Math.sin(Math.toDegrees(sinInc / 200 * Math.PI * delta)) * 2500;
zMove[0] = zSpeed * (float) Math.sin(Math.toDegrees(sinInc / 200 * delta)) * 1250;
for (int i = 1; i<16; i++) {
xMove[i] = xSpeed * (float) Math.sin(sinInc2 / 128 * Math.PI * i/2 * delta) * WIDTH * 16;
yMove[i] = ySpeed * (float) Math.sin(sinInc2 / 64 * Math.PI * i * delta) * HEIGHT * 4;
}
xMove[16] = xSpeed * (float) Math.sin(sinInc2 / 64 * Math.PI * 2 * delta) * WIDTH * 8;
yMove[16] = ySpeed * (float) Math.sin(sinInc2 / 32 * Math.PI * 2 * delta) * HEIGHT * 4;
xMove[17] = xSpeed * (float) Math.sin(sinInc2 / 32 * Math.PI * 2 * delta) * HEIGHT * 10;
}
次のデバッグ出力では、Delta 4.0 が 250FPS の通常の値であり、その後 FPS が低下し、突然 xMove[17] がほぼ同じ大きさの負の値を返しますか?
Last frame in milliseconds: 231884072
Delta: 4.0
xMove[17]: 164.297
Last frame in milliseconds: 231884077
Delta: 5.0
xMove[17]: -160.83817
Last frame in milliseconds: 231884080
Delta: 3.0
xMove[17]: -0.7198944
Last frame in milliseconds: 231884084
Delta: 4.0
xMove[17]: 162.12277
それだけでは不十分な場合は、JAR 内でアプリケーションを実行するためのすべてが含まれているアプリケーションの実行可能JARを次に示します。
何が問題なのかわかりませんか、それともコードに何か問題がありますか?