Я пишу игру на 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 передавались те же значения, что и раньше.
Что делать? Как правильно изменить массу тела?