1. 程式人生 > >cocos2dx物理引擎和碰撞檢測(四)形狀Shapes

cocos2dx物理引擎和碰撞檢測(四)形狀Shapes

前面讓大家瞭解了物理世界,下面將為大家介紹物理世界中的物體。

形狀Shape描述了可相互碰撞的幾何物件的外形,它通常會是一個幾何圖形,這與包圍盒的概念非常相似。在引擎當中,形狀可以作為一個單獨的物件,就算不進行物理模擬,也可獨立使用,開發者可以在形狀Shape上執行一些函式操作。

類b2Shape是形狀的基類,Box2D引擎中各種形狀類都是繼承自這個基類。此基類定義了幾個常用函式:

(1)判斷一個點和形狀是否有重疊

(2)在形狀上執行光線投射(ray cast)

(3)計算形狀的AABB

(4)計算形狀的質量

另外,每個形狀都將會是一個幾何圖形。所以它有2個成員變數:型別(type)和半徑(radius)。引擎當中存在2中型別圓形和多邊形。

圓形(Circle Shapes)

圓形形狀(b2CircleShape)是一個由位置和半徑表示的幾何圖形。圓形都是實心的,主要引數是半徑,圓形的位置就是本體的圓心,質心也是這裡。下段程式碼就是建立一個圓形形狀,並設定位置和半徑。

//建立圓形形狀的物件

b2CircleShape circle;

//設定位置

circle.m_p.Set(1.0f,2.0f,3.0f)

//設定半徑

circle.m_radius =0.5f;

多邊形(b2PloygonShape)

在遊戲當中,使用最多還是多邊形。畢竟遊戲中的圓形元素並不多。在Box2D當中一個多邊形形狀是通過頂點來描述的,所使用的額頂點必須是逆時針排列,逆時針相對於右手座標系統來說。看程式碼:

頂點定義多邊形

//按逆時針順序定義一個矩形

//頂點陣列

b2Vec2 vertices[4];

vertices[0].Set(0.0f,0.0f);

vertices[1].Set(1.0f,0.0f);

vertices[2].Set(0.0f,1.0f);

vertices[3].Set(1.0f,1.0f);

int 32 count = 4;

//建立多邊形

b2PloygonShape ploygon;

ploygon.Set(vertices,count);

另外,為了方便開發者使用,引擎還提供了一些定義好的初始化函式來建立固定的多邊形形狀:箱(box)和邊緣(edge,也就是線段)

//設定為箱子

void SetAsBox(float32 hx,float32 hy);

void SetAsBox(float32 hx,float32 hy,const b2Vec2& center,float32 angle);

//設定為邊緣

void SetAsEdge(const b2Vec2& v1,const b2Vec2& v2);