Как сделать совместное при столкновении в box2d

Я обнаруживаю столкновение в функции BeginContact контактного слушателя.

void MagneteListener::BeginContact(b2Contact* contact)
{
// I detect 2 needed bodies.
...
b2RevoluteJointDef revDef;
revDef.lowerAngle = 0.0;
revDef.upperAngle = 0.0;
revDef.enableLimit = true;
revDef.collideConnected = false;
revDef.Initialize(body1, body2, body1->GetWorldCenter());
_world->CreateJoint(&revDef);
// End create joint
}

В результате программа вылетает с ошибкой

Утверждение не выполнено: (IsLocked () == false), функция CreateJoint,

Если я создаю соединение с этими двумя телами после столкновения перед следующим мировым шагом, это работает хорошо.

_world->Step(dt, velocityIterations, positionIterations);

Таким образом, вопрос, есть ли способ совместного пролива при столкновении?

0

Решение

Вы должны хранить информацию, необходимую для создания соединения где-то в вашей программе, и использовать ее, когда b2World::update функция возвращает

2

Другие решения

Других решений пока нет …