Libgdx Box2D实战---放开那小球(二:Box2D介绍)

来源:互联网 发布:linux命令用户组密码 编辑:程序博客网 时间:2024/04/27 18:36


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.



0 0
原创粉丝点击