Box2d的计量单位是米,32像素 = 1米
b2World:
每个box2d程序都会从b2World对象的创建开始。这是一个管理内存、对象,模拟物理的中心。创建world的必要参数就是重力。
b2World 的构造函数。 b2World(const b2Vec2& gravity);
重要的成员如下
// 设置是否允许休眠,休眠指当物体静止不动时,不进行模拟计算。
void b2World::SetAllowSleeping(bool flag)
//
设置检查连续的物理碰撞
void SetContinuousPhysics(bool flag) { m_continuousPhysics = flag; }
// 根据b2BodyDef创建一个刚体对象
b2Body* b2World::CreateBody(const b2BodyDef* def)
// 在游戏循环里手动调用Step。第一个参数是上次调用本函数与当前的时间差,单位秒
// 2参数是速度迭代,可调整物体的运动,3参数是位置迭代,调整物体位置,减少物体间重叠
// 2、3参数官方文档推荐使用8和3
void b2World::Step(float32 dt, int32 velocityIterations, int32 positionIterations)
b2BodyDef:
刚体的定义,其对象作为参数传给b2World 的 CreateBody() 函数。就能创建实际的刚体对象。
b2Body:
Box2D中的刚体。刚体不能自己创建,必须由 CreateBody()
创建。刚体创建完毕后,需要通过
b2Fixture* b2Body::CreateFixture(const b2FixtureDef* def)
给他绑定包围盒。看参数就知道和b2Body一个尿性,必须由Def来创建。每调用一次 CreateFixture()
都会新增一个fixture,不会覆盖上一个fixture。
b2FixtureDef:
fixture---固定装置。有的资料翻译为“夹具”,其实就是body的实际碰撞体。这个Def相当重要。参数 shape 表示fixture的外形。类型是 const b2Shape* shape; Box2D提供4种shape如下图
chain 链状:由线段序列组成,具有双面碰撞,
circle 圆形:实心的。
edge: 边形状,由多条线段组成,只能和圆形、多边形碰撞,因为Box2D碰撞必须有体积。
polygon 凸多边形:默认最多八条边,为了方便起见,系统提供了函数 SetAsBox 直接可以设置矩形包围盒。
配置:cocos2d3版本默认是不带Box2D的,因此需要配置一下
1、增加Box2D项目。在解决方案上右键---添加已有项---定位到自己项目cocos目录下的Box2D项目。
2、右键解决方案,属性---项目依赖项,把libBox2D选中。如果不选,只能在Box2D项目上点右键编译,选中后能省去以后不少麻烦。
3、在项目的头文件中添加
ok,到此为止,在项目里可以正常使用Box2D了。
很多Box2D演示都有绿色或红色的物体来表示碰撞,是因为开启了
debugDraw。cocos里要开启,需要去Test里找一个叫GLES-Render 的文件
1、头文件内声明必要的变量和函数
2、在初始化的地方创建world和body对象
3、绘制、更新