几个概念:
世界(b2World):世界就是一个环境,所有物理运算都在这个里面进行。
形状定义(b2ShapeDef):形状定义是什么?说简单点形状定义就是定义你这个对象的样子,它用来做什么?就是用来确定你的碰撞。
刚体定义(b2BodyDef):刚体定义就是设定刚体的初始具体,在目前来说,最大的功能就是把你定义好的形状加到你想到的刚体上。
刚体(b2Body):刚体就是物理引擎里面的东西(对象),它可以受力的作用进行当前位置的变化旋转等。你要在世界中使用的所有物体目前 来说都是刚体。
数据类型:
1、b2Vec://在2bMath.h中定义
就像在3D中Vector3类的使用一样,b2Vec2在Box2D中也应用广泛,你几乎在每个时刻都用到它,比如说定义坐标位置,定义Box大小等。类似于向量。
b2Vec2是由float32类型的x,y组成,支持负向量,+=,-=,*=操作符,
支持的方法有
Void SetZero();设置x,y为0
Void Set(float32 x_, float32 y_);设置x,y为指定值
b2Vec2 Make(float32 x_, float32 y_),生成一个值指定的b2Vec2
float32 Length()取得向量的长度或模
float32 Normalize()标准化向量
bool IsValid()检查是否有效
2、2b2Mat22://在2bMath.h中定义
其实b2Mat22一个由两个b2Vec2组成的2*2方阵,类似一个二维数组,可以直接由两个b2Vec2(col1、col2)构造或者由一个角度值构造。
主要方法有:
void Set(const b2Vec2& c1, const b2Vec2& c2)
void Set(float32 angle),
提供两种方式赋值方法
void SetIdentity(),设定恒等式
void SetZero(),把col1、col2的x,y都清为0
b2Mat22 Invert(),转换相关数据
b2Vec2 Solve(const b2Vec2& b),解决A * x = b
3、b2AABB:
b2AABB就是一个盒子,是由两个向量组成,一个为minVertex是最小顶点,另一个为maxVertex是最大顶点,通过这两个顶点来表示最为普通的AABB框。
结构体原型:
struct b2AABB
{
/// Verify that the bounds are sorted.
bool IsValid() const;
b2Vec2 lowerBound; ///< the lower vertex
b2Vec2 upperBound; ///< the upper vertex
};
4、b2ShapeDef
b2ShapeDef直翻为形状定义,它用一个b2ShapeType型量type来表示形状类型,用函数指针来表示用户数据(userdata),用一 个b2Vec2向量localPosition来表示当前位置,用float32的localRotation来表示当前角度,用float32的 friction、density、restitution来表示摩擦力、密度、弹性系数,用uint16的categoryBits和maskBits 来表示碰撞位及位标识(可以用来过滤一些碰撞),用int16的groupIndex来表示组号,这个组号可以用来过滤还比位标识优先。
相关常量
enum b2ShapeType
{
e_unknownShape = -1,
e_circleShape,
e_boxShape,
e_polyShape,
e_meshShape,
e_shapeTypeCount,
};
相关形状定义
b2CircleDef,圆,继承于b2ShapeDef,type 为 e_circleShape,另外带有一个类型为float32的量radius来表示半径值。
b2BoxDef,盒子,继承于b2ShapeDef,type 为 e_ boxShape,另外带有一个类型为b2Vec2的量extents来表示区域值。
b2PolyDef,多边形,继承于b2ShapeDef,type 为 e_ polyShape,另外带有一个类型为b2Vec2的数组vertices来表示顶点,并带有一个int32型的量vertexCount来表示顶点数,目前顶点数最多支持8个。
5、b2BodyDef://在b2Body.h中定义
b2BodyDef是刚体定义结构,由一个函数指针userData来表示用户数据,一组类型为b2ShapeDef*指针数组shapes来表示形状队列,目前形状数最大支持64个,用一个b2Vec2向量position来表示当前位置,用类型为float32的量rotation来表示当前角度,用类型为b2Vec2的量linearVelocity表示线速度,用类型为float32的angularVelocity来表示角速度,用类型为 float32的量linearDamping来表示线性阻尼,用类型为float32的量angularDamping来表示角阻抗,用类型为bool 的allowSleep 来表示是否可以允许休眠,用一个类型为bool的isSleeping来表示是否正在休眠,用一个类型为bool的量preventRotation来表 示是否防止旋转,支持方法:
AddShape(b2ShapeDef* shape)。