錯誤代碼
// 建立球2
b2BodyDef ballBodyDef2;
ballBodyDef2.position.Set(300/PTM_RATIO, 300/PTM_RATIO);
b2Body *_body2 = _world->CreateBody(&ballBodyDef2);
// 錯誤:將 fixture 綁定給 _body(球1)而非 _body2
_body->CreateFixture(&ballShapeDef2); // 應為 _body2->CreateFixture
修正
_body2->CreateFixture(&ballShapeDef2); // 正確綁定給球2的 body
現象解釋
- 球1 的 body 擁有兩個 fixture(球1 與球2 的形狀),質量、慣性張量疊加,行為異常。
- 球2 的 body 無 fixture,**無碰撞形狀**,重力下直接穿透地板。
除錯技巧
- 開啟 Box2D DebugDraw,檢視每個 body 的 fixture 形狀、AABB。
- 建立 body 後立即檢查
body->GetFixtureList() 是否為預期數量。
- 使用命名規範:
ballBody, ballBody2 對應 ballFixture, ballFixture2。