在box2d世界中创建物体的几个必须步骤
2013-10-17 17:27
232 查看
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);
代码如:
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);
相关文章推荐
- 创建路由的几个步骤
- Android基于box2d开发弹弓类游戏[三]-------------创建游戏世界
- Box2D 物理引擎---创建一个简单的模拟物理世界
- Cocos2d-x之物理世界(创建运动的物体)
- 在3D世界中创建不同的相机模式——只绘制在相机视野中的物体:八叉树
- objective-c创建box2d世界以及地面(或者 edge)
- MascotWorld例子:创建一个场景,添加物体并畅游世界
- Jbox2D入门学习一物理世界及最简单的物体创建
- orcle 创建用户的几个步骤
- Cocos2d-x之物理世界(创建静态的物体)
- 创建共享内存分以下几个步骤
- 下面所述步骤中,不是创建进程所必须的步骤是?----阿里巴巴2015实习生笔试题
- Cocos2d-x之物理世界(创建悬浮的物体)
- 手工创建mfc程序的几个步骤
- 愤怒的小鸟-物理世界Box2d(1)-静态刚体的创建
- 创建内存共享的几个步骤: (转)
- box2d 模拟真实世界的物体碰撞 类似愤怒的小鸟
- 创建共享内存分以下几个步骤
- 从零开始box2d(1) 创建世界
- 动态创建Fastreport分以下几个步骤: