前面让大家了解了物理世界,下面将为大家介绍物理世界中的物体。
形状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当中一个多边形形状是通过顶点来描述的,所使用的额顶点必须是逆时针排列,逆时针相对于右手坐标系统来说。看代码:
顶点定义多边形