Box2d независима симулация?

Всичко за програмирането на игри - архитектура, графика, звук, изкуствен интелект, мрежи.
Sharpirate
New User
New User
Мнения: 2
Регистриран на: 25 сеп 2016 12:12

Box2d независима симулация?

Мнение от Sharpirate » 30 сеп 2016 22:33

Здравейте, имам проблеми при имплементирането на box2d симулация, която не зависи от кадрите (FPS).
Прочел съм http://gafferongames.com/game-physics/f ... -timestep/ и идеята ми е ясна. Обаче имам проблем с интерполацията.
Пиша на Java, използвайки libGDX. Ето моят код:

Код: Избери всички

private void updateWorld() {

    accumulator += Gdx.graphics.getDeltaTime();

    while (accumulator>= step) { // The step is 1/10

        copyCurrentPosition();

        world.step(step, 8, 3);
        accumulator -= step;
    }

    interpolate(accumulator / step);
}

private void copyCurrentPosition() {
    prevPosition = new Vector2(player.body.getPosition().x, player.body.getPosition().y);
}

private void interpolate(float alpha) {
    player.body.setTransform(player.body.getPosition().x * alpha + prevPosition.x * (1.0f - alpha), 	player.body.getPosition().y * alpha + prevPosition.y * (1.0f - alpha), 0);
}
Това би трябвало да ми гарантира симулация, независима от FPS. Понеже симулацията се ъпдейтва на всеки десети кадър (1/10), трябва да интерполирам позиции на база предишна и сегашна позиция. Всичко изглежда добре, но ето го резултата:

Изображение

Потребителски аватар
themean
Power User
Power User
Мнения: 854
Регистриран на: 02 дек 2010 22:51

Re: Box2d независима симулация?

Мнение от themean » 05 окт 2016 00:53

Не виждам някакъв проблем в кода, както и да е. Не си прави че ти гарантира каквото и да е при какъвто и да е фреймрейт.
Сам можеш да погледнеш в примера който си линкнал че има ограничение за фрейм тайма.

Код: Избери всички

    if ( frameTime > 0.25 )
        frameTime = 0.25;
Най-добре го пусни с дебъгера и виж какво става. Според мен алфата ти става отрицателна от време на време. Другото възможно е степ да ти връща грешни координати понеже е минало много време.
Всъщност какво трябва да се получи ?

Sharpirate
New User
New User
Мнения: 2
Регистриран на: 25 сеп 2016 12:12

Re: Box2d независима симулация?

Мнение от Sharpirate » 07 окт 2016 18:46

themean написа:Не виждам някакъв проблем в кода, както и да е. Не си прави че ти гарантира каквото и да е при какъвто и да е фреймрейт.
Сам можеш да погледнеш в примера който си линкнал че има ограничение за фрейм тайма.

Код: Избери всички

    if ( frameTime > 0.25 )
        frameTime = 0.25;
Най-добре го пусни с дебъгера и виж какво става. Според мен алфата ти става отрицателна от време на време. Другото възможно е степ да ти връща грешни координати понеже е минало много време.
Всъщност какво трябва да се получи ?
Здравей, оправих проблема! С данните от интерполацията аз съм променял позицията на тялото а се оказа че с тези данни само рендвам текстурата на екрана. Все пак много се радвам че получих отговор в български форум, защото дори и в stack-а не ми отговориха! :D

Потребителски аватар
themean
Power User
Power User
Мнения: 854
Регистриран на: 02 дек 2010 22:51

Re: Box2d независима симулация?

Мнение от themean » 07 окт 2016 22:10

Пак заповядай :). Ако мога да съм полезен ще се радвам да помогна

Отговори

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 4 госта