2012-09-26 184 views
0

在我的應用程序中,當兩個物體相撞時,我必須根據它們的碰撞速度和碰撞容限來決定是否損壞物體。身體可以從任何方向碰撞。我對矢量操作的理解很少。我沒有得到如何設置容差,然後比較它們的速度和容差。任何人都可以提供一個關於設置寬容和比較的想法嗎?Box2d比較碰撞

回答

1

最簡單的方法是取其速度之間的差異,例如。

b2Vec2 velDiff = body1->GetLinearVelocity() - body2->GetLinearVelocity(); 
float collisionSpeed = velDiff.Length(); 

您可能還想考慮所涉及的身體的質量,因爲較重的身體之間的碰撞會有更多的能量。

對於像圓圈或箱子這樣的簡單形狀來說,這通常就足夠了,特別是當它們直接相撞時。對於更薄的形狀,或者物體在離重心較遠的地方或者它們明顯旋轉的地方碰撞的地方,可能會發現它不準確。

更準確的方法是檢查Box2D計算的碰撞反應衝量的大小,以推開身體。通過在碰撞回調中實現PostSolve函數,並查看normalImpulse組件的大小,您可以找到它。

+0

+1。 PostSolve是正確的選擇 – Andrew