Box2D使用笔记(一)——初始化
2015-09-09 18:33
169 查看
B2World 是 每个Box2D程序的标配,使用Box2D的是从创建b2World开始的。b2World的话,负责管理内存,对象和仿真。可以说,这货就是神奇的物理世界的幕后操纵者,大家都得归它管。
创建也非常简单,只需要传入一个重力参数。 也就是高中物理里面的g了
示例代码:
然后,有了b2World之后,这个世界只是个空壳。还需要加入其他的物理对象。
在物理的世界里面,有一种神奇的物体,叫刚体(RigidBody)。它不会变形,不能被破坏,非常坚硬。刚体分静态和动态两种,静态的就是如地面这样的不会动的物体。
创建过程非常简单,遵循以下四步:
1. 首先,定义它的基本属性,如位置
2. 然后,将这些属性传给,b2World交给它来创建刚体
3. 使用夹具(Fixture)为物体添加,形状、密度、摩擦力等属性。 夹具更像是,物理材质。关于夹具的介绍参考:/article/2419829.html
4. 使用物体,创建夹具。
示例代码:
所以,也有对应的DestroyBody和DestroyFixture函数。务必保持创建和销毁的一致性。
场景里,已经有了世界对象和静态刚体(地面),接下来,需要创建个能动的东西——动态刚体对象。
动态刚体,必须指定质量参数。同时,要在创建的时候指定其类型为b2_dynamicBody
其他的步骤和静态刚体就保持一致了
示例代码:
基本的对象就准备好了。现在我们有,一个世界对象,一个不会动的地面,和一个会动的物体。
创建也非常简单,只需要传入一个重力参数。 也就是高中物理里面的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);为了得到正确的效果,必须为动态刚体设置密度参数。在现实世界中,所有物体都有其密度。这里也不例外。
基本的对象就准备好了。现在我们有,一个世界对象,一个不会动的地面,和一个会动的物体。
相关文章推荐
- 最长回文字符串_Manacher算法_(O(n))
- Java学习笔记---多线程同步的五种方法
- 解决 - java.lang.OutOfMemoryError: unable to create new native thread (转载)
- OC与Swift混编
- 如何在Ubuntu中安装最新版Eclipse
- 第6回 这莫不是传说中的Activity
- EditText挡住输入框问题的解决
- SqlServer性能检测和优化工具使用详细
- 学术牛人教你如何阅读外国文献1
- BNU 22494 Kitchen Robot
- uva 12661 funning car racing
- Entity Framework Code First映射配置
- JS实现动画
- Reverse Words in a String —— Leetcode
- 黑马程序员_java01_基本知识点
- Android客户端支付宝支付
- Qt5.4.1移植到arm——Linuxfb篇
- 【more effective c++读书笔记】【第5章】技术(7)——让函数根据一个以上的对象类型来决定如何虚化(1)
- 颜色渐变的算法
- 【more effective c++读书笔记】【第5章】技术(7)——让函数根据一个以上的对象类型来决定如何虚化(1)