因此,我一直在使用 opengl 在 java 中制作一个小型演示程序,作为练习。一切都很顺利,直到我实现了 getTime(); 和 getDelta(); 计算每帧花费多少时间的函数。然后我通过将它们的速度乘以 getDelta() 将其应用于我所有的运动计算;它运作良好,只有当帧随机轻微下降和 getDelta(); 返回一个稍大的值,我的计算开始输出非常奇怪的值,这些值仍然在计算计算的运动范围内但不正确,这发生在几帧直到帧速率上升到正常(在这种情况下为 250FPS)和运动正常继续,甚至从确切位置继续。自 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 中运行它的所有内容,因此您可以看到自己: http ://harha.us.to/files/files_public/Starfield_Exe.jar
我只是不知道出了什么问题,或者我的代码中有什么问题吗?