0

コンタクトリスナーの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、

次のワールドステップの前に衝突後にこれらの2つのボディとジョイントを作成すると、うまく機能します。

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

それで、問題は衝突時に海峡をつなぐ方法はありますか?

4

1 に答える 1

2

ジョイントを作成するために必要な情報をプログラムのどこかに保存し、b2World::update関数が戻ったときにそれを使用する必要があります

于 2012-09-22T12:19:31.173 に答える