Интерполяция Box2D и фиксированный временной шагJAVA

Программисты JAVA общаются здесь
Anonymous
Интерполяция Box2D и фиксированный временной шаг

Сообщение Anonymous »

Я использую Libgdx с Box2D и R.U.B.E. редактор.
У меня проблема. Некоторое время назад я заметил, что физика ведет себя по-разному в зависимости от скорости устройства и т. д.
Поэтому я искал эту проблему и нашел http://gafferongames.com/game-physicals ... -timestep/ и был в замешательстве :D
Теперь наконец-то получилось что-то, что заставило физику вести себя одинаково на всех моих устройствах ;)
Но я увидел, что на моем более быстром устройстве мои динамические тела дергаются/глючат? или что-то в этом роде.
Ну, я обнаружил, что могу интерполировать положения своих тел, но есть проблема.
Я не мог Не могу найти ничего, что позволило бы интерполяцию между положениями тел работать.
Может ли кто-нибудь показать мне фрагменты кода, как я могу получить все свои динамические тела в своей сцене и заставить их интерполировать свои позиции?
Пожалуйста, помогите мне:?
Я публикую вам то, что я сделал.
Для фиксированного временного интервала:
Код:
public float BOX2D_MAX = 0.25f;
public float BOX2D_STEP = 1 / 60f;

in render() method:

accumulator += dt;

if (dt > BOX2D_MAX){
dt = BOX2D_MAX;
}
while (accumulator >= BOX2D_STEP)
{
resetsmooth();

scene.world.step(BOX2D_STEP, scene.velocityIterations, scene.positionIterations);
accumulator -= BOX2D_STEP;

}

interpolation = accumulator / BOX2D_STEP;
scene.world.clearForces();
smooth();

и моя попытка интерполировать мои тела:
Код:
public void smooth( ) {

float minusOne = 1.0f - interpolation;

bod = scene.world.getBodies();

//looking up for the bodies in my world
while(bod.hasNext() == true){

n = bod.next();

if(n.getType() == BodyType.DynamicBody){

smoothX = interpolation * n.getPosition().x + minusOne * nPosX;
smoothY = interpolation * n.getPosition().y + minusOne * nPosY;
smoothA = interpolation * n.getAngle() + minusOne * nAng;

//transform the position
n.setTransform(smoothX, smoothY, smoothA);

}
}
}

public void resetsmooth(){

bod = scene.world.getBodies();

//looking up for the bodies in my world
while(bod.hasNext() == true){

n = bod.next();

if(n.getType() == BodyType.DynamicBody){

//getting bodies position
nPosX = n.getPosition().x;
nPosY = n.getPosition().y;
nAng = n.getAngle();

}
}
}


Подробнее здесь: https://stackoverflow.com/questions/188 ... d-timestep

Вернуться в «JAVA»