在box2d世界中创建物体的几个必须步骤

1.首先你需要创建body定义,指定物体的一些初始属性,如位置,或速度等。

代码如:

b2BodyDef groundBodyDef;  //创建物体定义,这里的物体是地面盒

groundBodyDef.position.Set(0,0);//指定物体的位置

注:在b2Body.h中可以看到,b2BodyDef是一个结构体,可以用它来指定物体的初始属性,如userData,position,angle,linearVelocity等等。具体的请参考b2Body.h文件。

 

2.一旦设置好物体定义,就可以使用世界对象来创建物体。

代码如:

_groundBody = _world->CreateBody(&groundBodyDef);

注意,用world对象来创建物体的时候,要使用之前创建的物体定义为参数。

在b2World.h文件中,该方法的定义如下:

         /// Create a rigid body given a definition. No reference to the definition

         /// is retained.

         /// @warning This function is locked during callbacks.

         b2Body* CreateBody(const b2BodyDef* def);

3.然后需要为物体定义一个shape(形状),代表要仿真的物体的几何形状。

代码如:

b2PolygonShape groundBox;

groundBox.SetAsEdge(b2Vec2(0,0), b2Vec2(winSize.width/PTM_RATIO, 0));

 

注意:b2PolygonShape是继承自b2Shape的一个子类,SetAsEdge方法实际上是使用两个点来设置一条边界。具体请参考b2PolygonShape.h文件。

 

4.接下来需要创建一个fixture(夹具)的定义,在这一步需要将夹具定义的形状设置为刚刚所创建的形状,并设置一些其它的属性,如密度或摩擦力等。

代码如:

b2FixtureDef groundBoxDef;

groundBoxDef.shape = &groundBox;

 

注意:

b2FixtureDef也是一个结构体,可以用它来设置夹具的一些属性,如shape,userData,friction等等。

 

5.最后,使用物体对象来创建夹具对象。

_bottomFixture = _groundBody->CreateFixture(&groundBoxDef);

注意:在创建夹具对象的时候,必须以夹具定义作为参数。

 

6.特别需要注意的是,我们可以给单个物体添加多个夹具,当创建复杂对象的时候,这一点会很有用。实际上,在创建地面盒(沿着屏幕的不可见边界时),我们为_groundBody这个物体对象添加了4个夹具对象,分别是:

//两点分别是左下的(0,0)和屏幕最右下的(winSize.width/PTMRATIO,0),所以是底部夹具(地面)

groundBox.SetAsEdge(b2Vec2(0,0), b2Vec2(winSize.width/PTM_RATIO,0));

    _bottomFixture = groundBody->CreateFixture(&groundBoxDef);

///左侧夹具

groundBox.SetAsEdge(b2Vec2(0,0), b2Vec2(0,winSize.height/PTM_RATIO));

    _groundBody->CreateFixture(&groundBoxDef);

///顶部夹具(天花板)

groundBox.SetAsEdge(b2Vec2(0,winSize.height/PTM_RATIO), b2Vec2(winSize.width/PTM_RATIO,winSize.height/PTM_RATIO));

    _groundBody->CreateFixture(&groundBoxDef);

///右侧夹具

groundBox.SetAsEdge(b2Vec2(winSize.width/PTM_RATIO, winSize.height/PTM_RATIO),b2Vec2(winSize.width/PTM_RATIO,0));

    _groundBody->CreateFixture(&groundBoxDef);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值