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

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

Я делаю так, чтобы по нажатию на экран некоторое тело разделялось на два тела. По нажатию на экран вызывается некоторая функция divide(), в которой я произвожу необходимые мне манипуляции с частицами, в том числе изменение массы, которое выглядит следующим образом:
...
        MassData newMassData=new MassData();
        newMassData.mass=this.body.getMass()-mass;// mass-это масса второго тела, которое отделяется от главного
        this.body.setMassData(newMassData);
...

В строчке this.body.setMassData(newMassData);ИНОГДА происходит ошибка из-за которой происходит завершение работы Java Platform SE binary. В логах пишется следующее:
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Assertion failed!

Program: C:\Program Files\Java\jdk1.8.0_05\bin\java.exe
File: /var/lib/jenkins/workspace/libgdx/extensions/gdx-box2d/gdx-box2d/jni/Box2D/Dynamics/b2Body.cpp, Line 355

Expression: m_world->IsLocked() == false

Было бы интересно хотя бы узнать, что это обозначает и почему приложение падает иногда. А самое главное, хотелось бы узнать, как грамотно реализовать разделение тела на две части и изменение массы тела.

P.S. Приложение падает именно в этой строчке и никак иначе, т.к. приложение может упасть только при наличии этой строчки кода.
  • Вопрос задан
  • 2716 просмотров
Решения вопроса 1
Нельзя изменять свойства тел, когда мир locked (читай выполняется step).
Почти уверен, что твой divide и step мира выполняются в разных потоках. Попробуй вызывать в одном.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы