如何在box2d中进行碰撞时的联合

时间:2012-09-21 07:24:44

标签: c++ ios box2d collision

我在联系人监听器的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);

所以问题是有没有办法在冲突中联合海峡?

1 个答案:

答案 0 :(得分:2)

您应该在程序中的某处存储创建关节所需的信息,并在b2World::update函数返回时使用它