第三章公共模組(common)
3.1簡介
公共模組包含設定(
settings),記憶體管理(memorymanagement),向量計算(vector math)。
3.2設定
標頭檔案b2settings.h包含: ·
諸如int32,float32這類資料型別 ·
常量(constants) ·
·版本號
型別(types)
box2d
定義了多種資料型別,例如float32,int8等等,以方便我們定義不同大小的結構。 常量
box2d
定義了很多常量,這些常量在b2settings.h中做了說明。通常我們不需要去修改這些常量。
分配的封裝
設定(settings)的檔案定義b2alloc和b2free,用於大塊記憶體分配,你可以將這些呼叫轉移到你自己的記憶體管理系統中。 版本
b2version
結構儲存當前的版本資訊,你可以在執行時調取。
3.3記憶體管理
box2d
的設計理念中,很多設計決策都是為了快速高效的使用記憶體。這一節我們會討論box2d怎樣和為什麼要分配記憶體。
box2d
傾向於分配大量的小物體(範圍大約在50-300位元組)。使用malloc和new方法在堆(heap)空間上分配記憶體對於小物體來說效率很低,並且容易產生記憶體碎片(fragmentation)。這些小物體的生命週期大多很短,例如接觸(contact),可能僅僅持續幾個時間片段。因此我們需要乙個分配器(allocator),能夠高效的為這些物體分配堆空間。
box2d
的解決方法是使用乙個叫做b2blockallocator的小物體分配器(smallobject allocator,soa),soa負責維護一定數量的大小可變的可增長的記憶體池(pool),當遇到記憶體請求時,soa返回一塊兒大小最合適的記憶體塊,當乙個記憶體塊被釋放的時候,它實際上被記憶體池**了。這些操作保證了快速響應記憶體的分配和釋放,不會產生大量的堆請求。
由於使用了
soa,在box2d中你不必再去new或者malloc乙個物體、裝置或者關節物件了,有乙個例外,你需要自己動手分配乙個b2world物件,b2world類中提供了工廠方法用於建立物體,裝置和關節,以便box2d通過soa將枯燥的處理細節包裝起來。因此,我們永遠也不要對物體,裝置或者關節手動呼叫delete或者free來釋他們。
在執行乙個時間間隔(
timestep)時,box2d需要一些臨時記憶體空間,這部分空間它通過乙個棧分配器(b2stackallocator)來避免單步(per-step)堆空間分配,你不需要跟棧分配器打交道,但是知道它的存在還是有必要的。
3.4數學(math)
box2d
包含了乙個小的向量和矩陣模組,為了滿足box2d以及api內部呼叫的需求。所有的成員都提供了呼叫介面,所以你也能夠在你的工程中呼叫他們。
數學庫**非常簡潔以便於移植和維護。
Box2D v2 3 0 使用者指南(第十三章)
第十三章限制 limitions box2d 使用很多近似來高效地模擬剛體的物理效果,這樣做導致了一些限制。下面列出了當前的一些限制 1.在非常輕的物體上面堆疊重物會不穩定,當質量比達到10 1的時候,穩定性會下降。2.對於通過關節連線的物體鏈,如果其中乙個輕的物體在支撐乙個重的物體,關節會拉伸變形...
Box2D v2 1 0 使用者手冊
box2d v2.1.0 使用者手冊 第01章 導言 introduction 第02章 hello box2d 第03章 公共模組 common 第04章 碰撞模組 collision module 第05章 動態模組 dynamics module 第06章 夾具 fixtures 第07章 物...
Gradle使用者指南 2 基本命令
使用task 關鍵字來定義gradle 任務 例 建立乙個build.gradle命名的檔案 build.gradle task hello 命令列切換到包含 build.gradle 檔案的目錄,執行gradle q hello 輸出為 gradle q hello hello world ps ...