Исправьте ваши временные шаги в Java

Я прочитал статью от Вот.

Но, похоже, я не могу перевести это на 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?

0

Решение

Государство — это более абстрактная идея. Он просто интерполирует число. Например, состояние может быть положением x объекта.

Пример для вас:

float x = x*alpha+oldX*(1-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);
}
}
2

Другие решения

Это простая структура, содержащая текущее положение и скорость перед каждым шагом интеграции. Это определено в предыдущий урок, а также в начале Timestep.cpp в коде вы можете скачать с этой страницы:

struct State
{
float x;          // position
float v;          // velocity
};
1

По вопросам рекламы [email protected]