cocos2dx物理引擎和碰撞檢測(四)形狀Shapes
阿新 • • 發佈:2019-01-27
前面讓大家瞭解了物理世界,下面將為大家介紹物理世界中的物體。
形狀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);