第一章 框架設計
總體的類如下圖所表示。
shape作為形狀基類。儲存了與形狀有關的物理量
class
shape
;
rectangle和circle派生於shape,儲存了實際的形狀資訊。
class
rectangle
:public shape
;class
circle
:public shape
;
phyattr中存放的是各種物理屬性,這些屬性是不限於任何物體都有的屬性。
namespace phy2d
agl::vec2f velocity;
//速度
agl::vec2f position;
//位置
float rotation =
0.0f
;//旋轉角度
float angularvelocity =
0.0f
;//角速度
agl::vec2f force;
//力float torque =
0.0f
;//轉矩
float friction =
0.0f
;//摩擦力
float mass =
0.0f
, invmass =
0.0f
;//質量和逆
~phyattr()
};};
phyobj是phyrect與phycircle的父類,其主要作用是做為基類指標,支援動態型別使用,分別繼承了形狀和物理特性,組成了有物理特性的形狀。
namespace phy2d
;class
phyrect
:public phyobj,
public rectangle,
public phyattr ;
class
phycircle
:public phyobj,
public circle,
public phyattr ;
};
world中負責整個物理世界的執行,儲存物體和碰撞資訊。協調整個物理引擎的流程。
namespace phy2d
;}
contact是儲存碰撞資訊的結構體,impulse是儲存衝量的,因為我們要實現衝量累積方法,所以碰撞資訊中保留上一次的衝量資訊。driver是儲存兩個物體指標和其碰撞資訊的結構體,這個結構是存放碰撞後結果的直接結構體,並且其中要有計算兩個物體衝量變化的能力。
namespace phy2d
;//碰撞資訊
class
contact
agl::vec2f position;
//碰撞點位置
agl::vec2f normal;
//分離軸方向
//agl::vec2f r1, r2;//半徑//現場算
float separation;
//最小相交距離};
class
driver};
}
還有一些數學計算,向量計算的類,這些類可以自己寫,也可以用現成的比如glm,這裡就使用自己寫的向量矩陣計算庫了。 自己動手寫搜尋引擎
radic 是我用go語言實現搜尋引擎的索引部分,包括 倒排索引 正排索引 分布式索引 首先需要go get github.com orisun radic package main import radic types bytes encoding gob fmt radic time book ...
關於2d物理引擎box2d與ape的評論
ape不行,做點簡單的撞球,撞球之類遊戲還行。我最開始用他實驗性做了個簡單的基於物理引擎的泡泡龍類遊戲,發現稍微多一點的幾何體堆疊在一起就會產生滲透現象,沒辦法只好更改最初的設計。要專注做物理遊戲,還是要精通box2d才行,而且box2d幾乎任何主流語言都有它的版本。所以建議不要學ape,除非你只是...
自己動手寫docker 2
2.1 linux namespace linux 支援的namespace namespace api的基本系統呼叫 不完整的ex,以下為呼叫後截圖為 package main import log os os exec syscall func main syscall.credential c...