我在联系人侦听器的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函数返回时使用它

关于c++ - 如何在Box2D中碰撞时建立关节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12525962/

10-10 07:12