Cocos2d-x 3.0中的新物理引擎:Chipmunk和Box2d
2014-05-11 16:11
274 查看
关于物理引擎,在3.0中有了全新的Physics integration,把chipmunk和Box2D封装到引擎内部,简化开发者的开发步骤。再也不用关心底层具体是用哪个物理引擎,也不用直接调用物理引擎的接口。
物理引擎和cocos2d-x进行了深度融合:(1) 物理世界被融入到Scene中,即当创建一个场景时,就可以指定这个场景是否使用物理引擎。
(2) Node自带body属性,也就是sprite自带body属性。
(3) Cocos2d-x 3.0对物理引擎的Body(PhysicsBody),Shape(PhysicsShape),Contact(PhysicsContact),Joint (PhysicsJoint),World(PhysicsWorld)进行了封装抽象,使用更 简单。
(4) 更简单的碰撞检测监听EventListenerPhysicsContact。
1. 创建带物理引擎的游戏工程
默认创建的工程已经支持物理引擎,内部默认使用chipmunk。当然,你也可以改为Box2D。但这并不对游戏开发产生影响。2. 创建带物理世界的场景scene
我们来创建一个带物理世界的场景scene,并传递给child layer。在HelloWorldScene.h中添加如下代码:
(2)Scene的getPhysicsWorld()方法用来获取PhysicsWorld实例。
(3)PhysicsWorld的setDebugDrawMask()方法,在调试物理引擎中是很有用的,它把物理世界中不可见的shape,joint,contact可视化。当调试结束,游戏发布的时候,你需要把这个debug开关关闭。
(4)通过setPhyWorld()方法来传递PhysicsWorld给ChildLayer。一个scene只有一个PhysicsWorld,其下的所有layer共用一个PhysicsWorld实例。
3. 创建物理边界
我们知道物理世界中,所有物体受重力的影响。物理引擎提供staticShape创建一个不受重力影响的形状,在Cocos2d-x 2.0中,我们需要了解物理引擎的staticShape相关的各种参数来完成边界设置。
在3.0中,PhysicsShape属于Node的一个属性,要设置PhysicsWorld的属性,都需要通过一个Node实例来中介传达。
下面的代码展示如何创建一个围绕屏幕四周的物理边界。
矩形区域大小,这里设置为visibleSize。
设置材质,可选参数,默认为PHYSICSBODY_MATERIAL_DEFAULT。
边线宽度,可选参数,默认为1。
(2)然后我们创建一个Node,把刚才创建的body附加到Node上,并设置好Node的position为屏幕中心点。
(3)最后,把Node添加到scene。
(4)Node的addChild方法,在3.0中,有对物理body做处理,它会自动把node的body设置到scene的PhysicsWorld上去。
(5)PhysicsBody中的工程方法,针对参数设置的body大小,会自动创建对应的PhysicsBody和一个PhysicsShape,这也是通常情况下,直接使用物理引擎创建一个body需 要做的事情。3.0的Physics integration极大的简化了使用物理引擎的代码量
4. 创建受重力作用 sprite
在3.0中创建一个受重力作用的sprite其实不难。示例代码如下:整个过程和之前创建边界的过程是一致的。
5. 碰撞检测
cocos2d-x中,事件派发机制做了重构,所有事件均有事件派发器统一管理。物理引擎的碰撞事件也不例外,下面的代码注册碰撞begin回调函数。
(2)_eventDispatcher是基类Node的成员,Layer初始化后就可直接使用。
相关文章推荐
- cocos2dx-3.0 中的关于物理引擎Box2D与chipmunk
- Box2D和Chipmunk的对比 Cocos2d-x物理引擎
- cocos2dx-3.0 中的关于物理引擎Box2D与chipmunk
- coco2dx 3.0以后最box2d和chipmunk这两个物理引擎进行了封装,使用起来非常的便利。
- 使用Cocos2d-x 3.0和物理引擎制作简单的platformer游戏
- cocos2d-x初探学习笔记--物理引擎box2d(1)
- cocos2d-x 物理引擎box2d
- cocos2d-x学习之路(12)--物理引擎box2d使用
- cocos2d - JS 物理引擎 - chipmunk
- Cocos2d-x 3.0 开发(九)使用Physicals代替Box2D和chipmunk
- Cocos2d-js官方完整项目教程翻译:六、添加Chipmunk物理引擎在我们的游戏世界里
- Cocos2d-x 3.0 简捷的物理引擎
- 「cocos2d-x」物理引擎学习之box2D(1)
- (译)在cocos2d里面如何使用物理引擎box2d:弹球
- cocos2d-x之物理引擎box2d(2)
- Cocos2d-x教程(17)-Box2D 物理引擎
- 物理引擎比较:Box2D 对比 Chipmunk
- 使用cocos2d-js-3.0RC1中的物理引擎chipmunk模拟的“别碰钉子”源码分享(含碰撞检测)
- 在cocos2d-x 3.0中使用物理引擎
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十五课:Cocos2D-X物理引擎之Box2D8-10