[Box2D] body abstract

b2BodyDef可以賦予什麼性質呢?以下是摘要,詳情可看官方文件。

b2BodyDef  bodyDef;

// body type
bodyDef.type = b2_staticBody; //只和dynamic物體反應
bodyDef.type = b2_kinematicBody; //只和dynamic物體反應
b2BodyDef.type = b2_dynamicBody; //注意一次只能設一種type

//position & angle
bodyDef.position.Set(1.0f, 1.0f); //讓body產生於(1,1)的位置,不然全擠在原點
bodyDef.angle = 0.25f * b2_pi; //body的角度,單位是radians

//damping
bodyDef.linearDamping = 0.0f; //線性阻尼
bodyDef.angleDamping = 0.01f; //角阻尼

//gravity scale
bodyDef.gravityScale = 0.0f;

//Sleeping parameters
bodyDef.allowSleep = true; //可允許休眠,減少模擬成本
bodyDef.awake = true; //允許醒來,通常被碰撞後會醒

//fixed rotation
bodyDef.fixedRotation = true; //不會因為有負載就造成旋轉

//bullet
bodyDef.bullet = true; //只能對dynamic物體標示,之後會對static和dynamic物體進行CCD
CCD:避免tunneling effect的檢驗法。會掃描移動路徑,並計算物體的TOI,然後將物體移回第一個TOI位置。
tunneling effect:因模擬是透過離散做法去呈現圖片,所以物體移動距離太長時,會有穿過其他物體的怪異現象。

//activate
bodyDef.active = true; //若是no,該物體就不會參與碰撞、ray cast

//user data
bodyDef.userData = &myActor; //聯繫應用物件和物體(body),所有的物體user data要有一致的物體type


留言