1

それで、私はちょうど演習として、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を次に示します。

何が問題なのかわかりませんか、それともコードに何か問題がありますか?

4

1 に答える 1

1

現在、デルタを使用して乗算sinIncsinInc2ているため、フレームレートに依存しないのは...回転速度ですか?

確かではありませんが、おそらく移動速度 ( ) を掛けたいと思うでしょう{x|y|z}Speed

* deltaどこにでも貼り付けるのではなく、デルタ乗算を共通因数まで移動することから始めてください。

sinInc += (0.0015 * delta);

正弦の増加がフレームレートに依存しないこと、単位時間あたり 0.0015 単位であることが明らかになります。

someXCoordinate[i] += xMove[i]動きに関しては、どこかでやっていると思います。もしそうなら、それはデルタを置く場所です:

obj.xPosition += (obj.xVelocity * delta);
于 2012-11-06T04:12:11.877 に答える