java - 在 Java 中修复你的时间步长

标签 java c++ game-loop

我已经阅读了来自 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/

相关文章:

java - 根据CPU时钟测量时间?

java - 锁定java同步方法

c++ - 基于策略的类中的策略转换运算符与私有(private)析构函数

java - 我是一名新程序员,每次运行这段代码时,我都会在 Java 中遇到空指针异常

java - 在 Java(和 SWT)中同步 "Frontend"和 "Backend"

c++ - 合并排序程序总是有效,但有时会在最后说 abort trap

c++ - 有没有允许重载运算符优先级的语言?

android游戏循环与渲染线程中的更新

ios - 更新cocos2d中的循环和按钮

javascript - 带有 requestAnimationFrame 的 addEventListener