我已经阅读了来自 here 的文章.
但我似乎无法将其翻译成 Java,我的意思是:
double t = 0.0;
const double dt = 0.01;
double currentTime = hires_time_in_seconds();
double accumulator = 0.0;
State previous;
State current;
while ( !quit )
{
double newTime = time();
double frameTime = newTime - currentTime;
if ( frameTime > 0.25 )
frameTime = 0.25; // note: max frame time to avoid spiral of death
currentTime = newTime;
accumulator += frameTime;
while ( accumulator >= dt )
{
previousState = currentState;
integrate( currentState, t, dt );
t += dt;
accumulator -= dt;
}
const double alpha = accumulator / dt;
State state = currentState*alpha + previousState * ( 1.0 - alpha );
render( state );
}
他使用的State
类是什么?我已经下载了代码,但找不到它的声明?代码在 Java 中会是什么样子?
最佳答案
状态更像是一个抽象的概念。他只是在插入一个数字。例如,状态可以是实体的 x 位置。
举个例子:
float x = x*alpha+oldX*(1-alpha);
在我的物理游戏中,我在每次渲染期间将 alpha 值传递给我的所有实体。他们会在渲染过程中使用它来计算他们位置的最佳近似值。我建议你也这样做。只需让您的渲染例程接受 alpha,并让每个对象跟踪其旧状态。
因此每个实体都会使用其最后位置和当前位置猜测其在渲染时的真实位置。
编辑:
public class Entity{
double oldX;
double oldY;
double x;
double y;
public void render(Graphics g, float alpha){
float estimatedX = x*alpha+oldX*(1-alpha);
float estimatedY = y*alpha+oldY*(1-alpha);
g.drawRect((int)estimatedX,(int)estimatedY,1,1);
}
}
关于java - 在 Java 中修复你的时间步长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17216459/