Я обнаруживаю столкновение в функции 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);
Таким образом, вопрос, есть ли способ совместного пролива при столкновении?
Вы должны хранить информацию, необходимую для создания соединения где-то в вашей программе, и использовать ее, когда b2World::update
функция возвращает
Других решений пока нет …