@delphikettle
Программирую в свободное от учёбы время

Как изменить массу тела в box2D?

Я пишу игру на Java, используя libGDX, в который встроен физический движок box2d. При некоторых обстоятельствах тела должны изменять свою массу. Как грамотно изменить массу в box2D? Я пробовал так:
float newR = (float) Math.sqrt(newMass / Math.PI / this.body.getFixtureList().get(0).getDensity());// перерасчёт радиуса тела
        MassData newMassData = new MassData();
        newMassData.mass=newMass;
        newMassData.center.set(newR, newR);
        this.body.setMassData(newMassData);

Масса принимает новое значение. И всё бы ничего, но тела начинает действовать так, будто я установил значение fixedRotation в true. Тогда я нашёл метод
this.body.resetMassData();
После вызова этого метода тело начинает вращаться, как надо, но масса становится равной предыдущему значения массы. Самое странное то, что так происходит не всегда. То есть иногда эта цепочка методов всё работает так как надо, притом что в качестве newMass передавались те же значения, что и раньше.
Что делать? Как правильно изменить массу тела?
  • Вопрос задан
  • 855 просмотров
Пригласить эксперта
Ответы на вопрос 1
kkray
@kkray
GameDev-programmer, C++, Marmalade, Unity3D
Попробуйте сначала менять density у fixtures, а затем позвjляйте Box2D самостоятельно пересчитать массу.

fixture->SetDensity( newDensity );
body->ResetMassData();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы