cocos2dx物理引擎和碰撞检测(四)形状Shapes

来源:互联网 发布:淘宝图片轮播怎么更换 编辑:程序博客网 时间:2024/05/22 05:05

前面让大家了解了物理世界,下面将为大家介绍物理世界中的物体。

形状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);


 

0 0
原创粉丝点击