Box2D使用笔记(一)——初始化

B2World 是 每个Box2D程序的标配,使用Box2D的是从创建b2World开始的。b2World的话,负责管理内存,对象和仿真。可以说,这货就是神奇的物理世界的幕后操纵者,大家都得归它管。

创建也非常简单,只需要传入一个重力参数。 也就是高中物理里面的g了

示例代码:

b2Vec2 gravity(0.0f, -10.0f); 
b2World world(gravity); 

然后,有了b2World之后,这个世界只是个空壳。还需要加入其他的物理对象。


在物理的世界里面,有一种神奇的物体,叫刚体(RigidBody)。它不会变形,不能被破坏,非常坚硬。刚体分静态和动态两种,静态的就是如地面这样的不会动的物体。

创建过程非常简单,遵循以下四步:

1. 首先,定义它的基本属性,如位置

2. 然后,将这些属性传给,b2World交给它来创建刚体

3. 使用夹具(Fixture)为物体添加,形状、密度、摩擦力等属性。 夹具更像是,物理材质。关于夹具的介绍参考:http://blog.csdn.net/complex_ok/article/details/6719936

4. 使用物体,创建夹具。

示例代码:

b2BodyDef groundBodyDef; 
groundBodyDef.position.Set(0.0f, -10.0f); 
b2Body* groundBody = world.CreateBody(&groundBodyDef); 

b2PolygonShape groundBox; 
groundBox.SetAsBox(50.0f, 10.0f);
groundBody->CreateFixture(&groundBox, 0.0f); 
可以看到,创建夹具和刚体都使用了Create系列的函数,根据C++ 程序员的创建销毁守恒定律,有Create就有Destroy。

所以,也有对应的DestroyBody和DestroyFixture函数。务必保持创建和销毁的一致性。


场景里,已经有了世界对象和静态刚体(地面),接下来,需要创建个能动的东西——动态刚体对象。

动态刚体,必须指定质量参数。同时,要在创建的时候指定其类型为b2_dynamicBody

其他的步骤和静态刚体就保持一致了

示例代码:

b2BodyDef bodyDef; 
bodyDef.type = b2_dynamicBody; 
bodyDef.position.Set(0.0f, 4.0f); 
b2Body* body = world.CreateBody(&bodyDef); 

b2PolygonShape dynamicBox; 
dynamicBox.SetAsBox(1.0f, 1.0f); 

b2FixtureDef fixtureDef; 
fixtureDef.shape = &dynamicBox; 
fixtureDef.density = 1.0f; 
fixtureDef.friction = 0.3f;

body->CreateFixture(&fixtureDef);
为了得到正确的效果,必须为动态刚体设置密度参数。在现实世界中,所有物体都有其密度。这里也不例外。

基本的对象就准备好了。现在我们有,一个世界对象,一个不会动的地面,和一个会动的物体。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值