您的位置:首页 > 运维架构 > Linux

Box2D的一些概念和笔记

2014-01-09 11:30 323 查看
cocos2d-x 3.0 对物理引擎的支持有了重大的更新,物理引擎被集成到游戏引擎中,使用者无需再直接调用Box2D或Chipmunk的API,详情请阅:
http://www.cocos2d-x.org/cocos-docs/manual/framework/native/physics/physics_integration/en

--------------------------------------------------------------------
下面时cocos2d-x 2.x的例子
---------参照实例:TestCpp/Classes/Box2DTest
---------Box2D的物理世界(树状,创建时确定从属关系)

b2World:一个物理世界,所有的刚体都将存在在这个世界里面,这个世界以米为距离单位。尽量贴近真实世界的度量。
b2Body:刚体,存在在物理世界的理想物体,比任何物体都硬,不会发生形变。body对应着一个bodyDef(刚体定义),刚体定义指定了刚体的类型(动态、静态、轨迹运动的)和刚体的位置,world通过刚体定义创建刚体。
b2Fixture:刚体修饰物,描述刚体的一些特征。fixture对应着fixtureDef(修饰物定义),它将形状绑定到刚体上,使刚体具有一些表现特征,如密度、摩擦系数、弹性等等。body通过fixtureDef创建fixture。

b2Shape:一个几何形状,比如圆和多边形。形状是修饰物fixture的一个属性,描述了刚体的碰撞边界。

b2Vec2:一个二维向量,可用于表示力、点等。

-------b2World, b2Body, b2BodyDef, b2Fixture, b2FixtureDef, shpae之间的关系

1.b2World通过b2BodyDef创建b2Body,没有b2BodyDef,b2Body不知道是什么类型,放在世界什么位置。
2.b2Body通过b2FixtureDef创建b2Fixture,没有b2Fixture,b2Body不知道是什么形状,摩擦、弹性、密度都不知道。shpae提供了碰撞检测的外边框。

-------需要手动关联物理世界和游戏中的元素(精灵)

void Box2DTestLayer::update(float dt)

{

    int velocityIterations = 8;

    int positionIterations = 8;

    world->Step(dt, velocityIterations, positionIterations);

}

-------碰撞检测

继承b2ContactListener接口
设置b2Word的碰撞监听器:world->SetContactListener(this);

实现4个事件回调(分别对应碰撞检测前后,碰撞处理前后):

 virtual void BeginContact(b2Contact* contact) ;

 virtual void EndContact(b2Contact* contact) ;

virtual void PreSolve(b2Contact* contact, const b2Manifold* oldManifold);

virtual void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse);

-------调试绘图(TestCpp/Box2DTest注释了该部分代码,可以参考)

复制TestCpp/Classes的Box2DTestBed/GLES-Render.h和Box2DTestBed/GLES-Render.cpp到Classes目录下

初始化GLESDebugDraw

重写draw()方法

-------

#define PTM_RATIO 32 //代表32个像素是一米

参考资料:http://blog.csdn.net/silangquan/article/details/17731729

--------------------------------

用到Box2D的linux工程编译,解决找不到Box2D/Box2D.h的问题:
修改make文件:
INCLUDES = -I.. -I../Classes \
                    -I$(COCOS_ROOT)/external/ \

SHAREDLIBS += -lcocos2d -lbox2d
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息