Java Libgdx - Box2d setTransform несколько тел с суставами

У меня есть группа тела, соединенная с некоторыми суставами (колесное соединение, призматическое соединение, вращательное соединение)

Я пытаюсь переместить эту группу тела в положение с помощью метода setTransform

Я решил переместить только одно тело в положение, а другие тела должны следовать из-за суставов.

Я получаю странный результат, тела начинают катиться, двигаться в никуда, настоящий странный результат, вот какое-то изображение, чтобы объяснить:

Как переместить несколько тел, прикрепленных к суставам, в положение с помощью setTransform?

Примечание: нет препятствий через объект, из точки А в точку Б (движется)

1 ответ

Решение

Из ссылки box2d setTransform():

Установите положение начала и поворота тела. Это разрывает любые контакты и пробуждает другие органы. Манипулирование преобразованием тела может вызвать нефизическое поведение.

Я думаю, что проблема заключается только в механизме, который вы пытаетесь использовать для перемещения тела, а setTransform - неправильный путь.

Вместо этого рассмотрите возможность использования

void com.badlogic.gdx.physics.box2d.Body.setLinearVelocity(Vector2 v)

Вы можете вычислить v как вычитание конечной точки и начальной точки тела. Вы должны справиться с останавливающим телом (обнуляя его скорость), когда оно достигнет цели.

Обратите внимание, что setLinearVelocity не зависит от вашей гравитации


Второе решение - просто установить Transform для всех тел в этой "объединенной группе". Вы можете перебирать тела и перемещать их в зависимости от их начальной позиции и целевого вектора

for(Body body : jointGroup)
{
    body.setTransform(body.getPosition.x - someX, ...)
    ...
Другие вопросы по тегам