Box2D官网 : http://box2d.org/
Box2D v2.1.0用户手册翻译 : http://blog.csdn.net/complex_ok/article/category/871440
Libgdx使用jni封装了box2d的c++版本,使得其运行效率比其他同级的物理引擎如jbox2d快不少。
BodyDef
A body definition holds all the data needed to construct a rigid body. You can safely re-use body definitions. Shapes are added to a body after construction.
定义Body所需要的所有数据都由它负责,我们可以重复使用。Shape与Body的绑定必须在它之后完成。
这个我理解为可以通过它来定义物体模型的类型等数据,它放入Body中。
常见用法是来定义类型:
如
BodyDef ballBodyDef = new BodyDef(); //构建对象
ballBodyDef.type = BodyType.DynamicBody;//定义类型,DynamicBody是不受控制的动态物体,KinematicBody是受控制的动态物体,StaticBody是静态物体
Body
A rigid body. These are created via World.CreateBody.
这是一个很坚硬的物体,不要妄想去改变它的形状,我们只能通过World.CreateBody方法来创建它。
用法如下(ballModels是body):
ballModels = world.createBody(ballBodyDef);
ballModels.createFixture(fd);
Box2DDebugRenderer
用于测试Box2D的图形显示,会把图形的形状通过不同颜色绘制出来。
ChainShape、CircleShape 、EdgeShape 、PolygonShape
他们都继承于Shap,是最基本的图形
Fixture
将形状绑定到物体之上, 并有一定的材质属性, 比如密度(density)等。必须由Body.createFixture生成。
FixtureDef
Fixture的属性申明,可重复使用。
FixtureDef fd = new FixtureDef();
fd.density = 1;//密度
fd.friction = 0f;//摩擦力
fd.restitution = 0.5f;//弹力0-1,1为完全弹性碰撞
fd.shape = shape;
World
The world class manages all physics entities, dynamic simulation, and asynchronous queries. The world also contains efficient memory management facilities.
管理所有物理实体,动态模拟,异步查询。还包含高效的内存管理机制。
物理世界,管理所有body,
如:
<span style="color:#33cc00;">world = new World(new Vector2(0, -10f), false);//代表向下重力加速度为10的物理世界</span>
<span style="color:#33cc00;"></span>
由于物理世界和render中时间不一致,我们一般要进行转换,就是在render方法中加一句:
world.step(1 / 60f, 10, 10);
同时,物理世界参考点在屏幕中心,而stage是(0,0),希望大家能够注意。
物理世界的长度不是按照像素计算的,要注意单位换算,一般换算比是 1:60,,物理世界是1.