У меня проблема. Некоторое время назад я заметил, что физика ведет себя по-разному в зависимости от скорости устройства и т. д.
Поэтому я искал эту проблему и нашел http://gafferongames.com/game-physicals ... -timestep/ и был в замешательстве
Теперь наконец-то получилось что-то, что заставило физику вести себя одинаково на всех моих устройствах
Но я увидел, что на моем более быстром устройстве мои динамические тела дергаются/глючат? или что-то в этом роде.
Ну, я обнаружил, что могу интерполировать положения своих тел, но есть проблема.
Я не мог Не могу найти ничего, что позволило бы интерполяцию между положениями тел работать.
Может ли кто-нибудь показать мне фрагменты кода, как я могу получить все свои динамические тела в своей сцене и заставить их интерполировать свои позиции?
Пожалуйста, помогите мне:?
Я публикую вам то, что я сделал.
Для фиксированного временного интервала:
Код:
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