Box2D学习笔记(2)

每个Box2D程序都将从一个世界对象的创建开始。他是管理对象以及模拟的中心。

Code

创建世界对象b2World,

(1)首先应当创建包围和盒对象b2AABB。他的大小是越大越好。

因为当刚体碰到包围盒的边缘的时候他会停止模拟。

(2)创建世界中的重力场。他是一个2维的适量b2Vec2。

(3)当物体停止移动的时候,让物体停止模拟。节约资源doSleep。

以上这3个的确定都是初始化world对象所必须的。到此就创建了一个有一定的大小以及一定的重力场的空间,有了就可以往里面装东西了。

创建刚体b2Body,

  (1)刚体的是由世界对象来创建的

var  body:b2Body=this.world.CreateBody(bodyDef);

其中的参数bodyDef是b2BodyDef创建的,是对body的defination.

var bodyDef:b2BodyDef=new b2BodyDef();
bodyDef.position.Set(
0,4);

他主要是用于初始化刚体在世界空间里的一些属性。包括位置(position)、质量(mass)、旋转角度(angle)等。

现在我们已经创建了一个刚体,并确定了他在世界空间当中的位置。物体到底是什么样的,以及他的物理属性怎么样是我么马上就要创建的。

  (2)给物体定义形状以及物理材质

body.CreateShape(shapeDef);

其中的初始参数shapeDef是b2ShapeDef

1var shapeDef:b2PolygonDef=new b2PolygonDef();//定义形状为多边形
2shapeDef.SetAsBox(3,3);//将多边形设为矩形
3shapeDef.density=1.0;//定义密度
4shapeDef.friction=0.3;//定义摩擦力

b2PolygonDef是继承自b2ShapeDef

public class b2PolygonDef extends b2ShapeDef

除了b2PolygonDef外还有b2CircleDef。

到现在我们的刚体依然是没的外观的,对其定义的shapeDef也只是对其封装了一些特殊的属性而已。

实际上定义刚体外观的是bodyDef(shapeDef也有这个属性)的userDate属性,他是*类型的。任何类型的对象都可以给他。我们现在需要用它来定义外观(形状)就将形状类或影片类的引用传给他就可以了。同时需要将userData加入到舞台的显示列表当中。

bodyDef.userData = new PhysCircle();

bodyDef.userData.width 
= rX * 2 * 30

bodyDef.userData.height 
= rX * 2 * 30

其中的physCircle是sharp类的自定义类。

来自官方的helloWorld源码:

Code

其中的userData的对象都是在flash中定义影片剪辑导出类。

原文地址:https://www.cnblogs.com/daidu/p/1593036.html