Cocos2d-x教程(17)-Box2D 物理引擎
物理引擎并非每款游戏的必需品,但它却可以更好的模拟现实世界的真实感。
此篇文章我们将初步讲解Box2D的使用方法。
想要精通Box2D并非简单的事情,但简单的使用Box2D却并非什么难事,首先我们需要了解几个常用的概念:
1.世界 b2World 所有的物理效果都是要在物理世界中模拟的,物理世界就是一个大集合,容纳所有刚体,夹具,形状等
2.物体 b2Body 也就是我们物理学中的刚体,一旦创建,则形态不会发生改变
3.形状 b2Shape 形状是依附于夹具的,具有摩擦(friction)和恢复(restitution)等属性,主要用于碰撞检测
4.夹具 b2Fixture 是一种把形状附加到物体上的关系,利用形状可以创建夹具,再将夹具加到物体之上,物体便拥有碰撞能力
5.关节 b2Join 可以将多个物体固定到一起,可以限定一个活动范围,常用属性有 限制(Limits) 和 马达(Motors)
注意事项:
1.物理世界依据的是牛顿定律,并独立于正常的渲染世界的,两个世界一个负责游戏画面渲染,一个负责物理模拟,他们之间存在数据交互。
2.不要试图在碰撞检测的发放中改变物体的状态,我们可以将需要删除的物体用容器保存起来,在驱动方法执行完后异步处理这些不需要的数据。
3.Box2D世界里的最佳物体大小是0.1~10个单位长度的物体,因此我们也应该尽量将物体大小设定在这个范围内,不应直接使用像素值,而应该一个转换率。我们在文件中声明一个宏定义 " #define PTM_RATIO 32 " 单位是像素/米
使用物理引擎的步骤:
1.初始化一个物理世界
2.创建一个精灵
3.为精灵设置夹具
4.为精灵设置身体
之后这个精灵便能够受物理效果的影响了。
下面新建一个工程,新建一个类,命名为Box2dHandler,我们将在该类中管理所有与物理引擎相关的内容。
我们习惯创建一个精灵类的派生类作为物理世界中的精灵对象,尽管这一步骤并非必须,但是你会发现有了这样的一个类,在之后处理数据时会方便很多。下面在Box2dHandler.h文件中引入头文件
#include "cocos2d.h"
#include "Box2D.h"
USING_NS_CC;
#define PTM_RATIO 32
加入下列代码:
我们在物理世界创建一个精灵时,便可以通过B2Sprite类来创建,当然前提是你希望这个对象受到物理效果的影响。<喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+z8LD5s7Sw8e8zND41NouaM7EvP7W0MztvNNCb3gyZEhhbmRsZXLA4KOs1NpCb3gyZEhhbmRsZXLA4NbQvauw/Lqsy/nT0M/gudi1xM7vwO2y2df3oaM8L3A+CjxwPjxpbWcgc3JjPQ=="http://www.2cto.com/uploadfile/Collfiles/20140103/20140103134353167.jpg" alt="\">
注意第30行,我们创建了一个GLESDebugDraw的对象,这个类的封装是位于"GLES-Render.h"和"GLES-Render.cpp"文件中的,这两个文件需要我们手动引入,文件目录为:cocos2d-x-2.2.1/samples/Cpp/TestCpp/Classes/Box2DTestBed
下面我们将这些方法一一实现:
相关新闻>>
- 发表评论
-
- 最新评论 更多>>