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
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
相关文章推荐
- UML学习笔记(二):复习面向对象的一些基本概念
- keras中文文档笔记2——一些基本概念
- 机器学习&数据挖掘笔记_15(关于凸优化的一些简单概念)
- PostgreSQL数据库内核分析 笔记(这本书没有怎么很好的看,主要就是一些数据结构、概念和流程的文字介绍)
- Zookeeper学习笔记一:分布式一致性的一些基本概念
- cocos2d-x初学笔记02:一些概念
- STL学习笔记(四)——温习一下C++的一些重要概念(上)
- 机器学习&数据挖掘笔记_15(关于凸优化的一些简单概念)
- TensorFlow 基础知识笔记之一些概念
- JavaScript权威指南(第六版) (JavaScript 数组一些概念)笔记
- GIT入门笔记(3)- git中的一些概念和原理
- Keras笔记(一)一些基本概念
- 3D数学--学习笔记(五岁以下儿童):总结一些概念(避免遗忘!)
- [Eclipse笔记]一些基本概念
- MySQL学习笔记---基础概念和一些基础SQL语句(二)
- 机器学习&数据挖掘笔记_15(关于凸优化的一些简单概念)
- 基础笔记:图的一些概念
- 基础笔记:图的一些概念
- 学习笔记一:HotSpot中的一些概念
- Django笔记-熟悉一些基本概念(一)