您的位置:首页 > 其它

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

2015-09-09 18:33 169 查看
B2World 是 每个Box2D程序的标配,使用Box2D的是从创建b2World开始的。b2World的话,负责管理内存,对象和仿真。可以说,这货就是神奇的物理世界的幕后操纵者,大家都得归它管。
创建也非常简单,只需要传入一个重力参数。 也就是高中物理里面的g了
示例代码:

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


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

在物理的世界里面,有一种神奇的物体,叫刚体(RigidBody)。它不会变形,不能被破坏,非常坚硬。刚体分静态和动态两种,静态的就是如地面这样的不会动的物体。
创建过程非常简单,遵循以下四步:
1. 首先,定义它的基本属性,如位置
2. 然后,将这些属性传给,b2World交给它来创建刚体
3. 使用夹具(Fixture)为物体添加,形状、密度、摩擦力等属性。 夹具更像是,物理材质。关于夹具的介绍参考:/article/2419829.html
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);
为了得到正确的效果,必须为动态刚体设置密度参数。在现实世界中,所有物体都有其密度。这里也不例外。

基本的对象就准备好了。现在我们有,一个世界对象,一个不会动的地面,和一个会动的物体。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: