1、概述
我们在游戏中,有时需要模拟真实的物理世界,让游戏世界中的物体都按照物理世界的规律进行运动。而要实现这种功能,就需要用到物理引擎。
在cocos2d-x中集成了2个物理引擎,一个是Chipmunk,一个是Box2D,Box2D的使用人数更多,文档,资料更加完成,所以我们一般选择Box2D。
cocos2d-x 3.0之后的版本对Box2D进行了封装,但是我们学习的时候还是最好了解着更加全面一点。
2、基本概念
Box2D中有几个常见的概念。
世界(world)
世界代表一个遵循物理规律的空间,所有的物体都在世界中运动,世界具有创建销毁刚体,创建销毁关节等功能。
刚体(body)
一块非常坚硬的物质,它上面的任何两点之间的距离都是完全不变的。刚体具体划分为静态刚体,动态刚体和菱柱刚体。
形状(shape)
一块严格依附于物体(body)的2D碰撞几何结构(collision geometry)。形状通过关联附加到刚体上,这样刚体就具备了视觉上的外形。
关节(joint)
它是一种用于把两个或者多个物体固定到一起的约束。Box2D支持的关节类型有:旋转,菱柱,距离等等。关节支持限制(limits)和马达(motors)。
关节限制(joint limit)
一个关节限制限定了一个关节的运动范围。例如人类的胳膊肘只能做某一范围角度的运动。
关节马达(joint motor)
一个关节马达能依照关节的自由度来驱动所连接的物体。例如,你可以使用一个马达来驱动一个肘的旋转。
3、世界
世界代表了一个遵守某些物理定律的空间。
3.1 世界的创建
创建世界需要两个步骤,首先生成重力向量,然后根据重力向量生成世界。
//重力参数,向量
b2Vec2 gravity;
//设置水平方向和垂直方向上的加速度
gravity.Set(0.0f, -10.0f);
//创建世界
world = new b2World(gravity);