物理模擬引擎專一於模擬現實世界中物體以及物體之間的基本運動規律。在遊戲中引入物理引擎能提升遊戲的真實性和可玩性,如《憤怒的小鳥》中小鳥彈出的拋物線運動、《割繩子》中割後的運動等等。既然是在遊戲中引入物理引擎那就設計到物理引擎和遊戲引擎之間的交互,看看書中的圖:框架
上圖反應的就是用戶、渲染世界(遊戲引擎)、物理世界(物理引擎)三者的交互關係。用戶經過操做遊戲引擎中的精靈、菜單等等渲染世界中的元素;遊戲引擎再將相關數據給物理世界,物理世界模擬計算後的結果 傳遞個渲染世界以便從新繪製精靈等等對象。在此過程當中兩個世界將根據各自的運轉週期獨立運轉,而物理世界中這個重要運轉週期叫:時間步。設計
關鍵組成指針
物理引擎考慮現實的須要將現實世界作了簡化和抽象。對象
物理世界b2World:由具備剛體屬性的物體以及物體上的框架形狀等等組成,它還包含了物理世界的重力向量;blog
物體b2Body:由具備位置、角度、阻尼等屬性組成的剛體。而根據運動狀態又可分爲:遊戲
靜態物體(b2_staticBody): 速度和質量爲零的物體,通常不參與碰撞檢測;get
平臺物體(b2_kinematicBody):按固定軌跡運動,質量爲零的物體,通常不參與碰撞檢測;it
動態物體(b2_dynamicBody):一般根據重力以及施加的外力(如扭矩torques、衝量impulses)運動的物體。渲染
框架b2Fixture:鏈接物體和形狀的對象,並具備物體的質量、密度、摩察係數等等重要數據,有了這些數據纔能有效的模擬物體的運動;float
形狀:形狀是物體的簡化表示,表示碰撞檢測的邊界。它依附於框架,一個框架只能鏈接一個形狀。Box2D提供圓形(b2CircleShape)和多邊形(b2PolygonShape);
關節b2Joint:用於鏈接兩個物體,限制物體的運動。關節有兩個重要的屬性:
關節限制(joint limit):限制運動的範圍;
關節馬達(joint motor):驅動一個鏈接物體的運動。
在物體、框架和關節中提供用戶數據的屬性,它的類型void指針。也就是這個void指針將物理世界和渲染世界提供了數據交互的通道。