2012-03-24 22 views
0

ケースイベント1は、我々はベクトル1に第1取付具を破壊したとき私たちは、器具の二つのベクトル(1体の全て)アサーションに失敗しました:(備品> m_bodyを==この)

//Create and add fixtures to vector1 and vector2 
b2PolygonShape shape1; 
shape1.SetAsEdge(from1,to1); 
vector1.push_back(body1->CreateFixture(&shape1,0)); 

b2PolygonShape shape2; 
shape2.SetAsEdge(from2,to2); 
vector2.push_back(body2->CreateFixture(&shape2,0)); 

を持っています。

イベント2の場合、vector2の最初のフィクスチャを破棄します。

body2->DestroyFixture(vector2[0]); //destroy first fixture2 
vector2.erase(vector2.begin()); //remove from vector2 

問題: "アサーションに失敗しました:(備品> m_body ==この)" 我々は(...)DestroyFixtureとき時々、私たちが得る

は、私がチェックし、I vector1にはフィクスチャ2が、vector2にフィクスチャ1があることがわかります。なぜそれができますか? fixture1をvector1にのみ、フィクスチャ2をvector2にのみ追加します。

答えて

2

これをコリジョンコールバック関数で実行している場合は、そうしないでください。 Box2Dは、衝突イベント中にボディ/フィクスチャを取り外すことを禁じます。代わりに、後で更新メソッド呼び出しなどで、後で衝突後の処理のために本文にフラグを立てます。

+0

問題の鍵です。どうも – Sinba

関連する問題