2012-09-21 65 views
0

我聽出了接觸聽衆的BeginContact功能的碰撞..如何使關節碰撞在Box2D的

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()==假),函數CreateJoint,

如果我在下一個世界步驟碰撞之前創建與這兩個物體的關節,那麼它的效果很好。

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

那麼問題是否有辦法聯合海峽碰撞?

回答

2

,可以儲存創建程序中的某處關節所需的信息,並使用它時b2World::update函數返回

+0

正如我在一個問題寫,我的下一個步驟之前做到這一點。所以正確的方法是檢測碰撞,保存信息,比設置contact-> SetEnabled(false)並在下一步創建關節之前? – Buron

+0

@Buron:我不明白你爲什麼需要關閉聯繫人。是的,這是唯一的方法,因爲您無法在模擬過程中創建新的物體,固定裝置或關節。在我的項目中,我只保存了所有的碰撞信息,並在'update'返回後立即處理它。 – Andrew

+0

真的非常感謝你! – Buron