Cocos2d-x教程(30)-3.x版本号物理引擎的使用

欢迎加入Cocos2d-x 交流群:193411763

转载时请注明原文出处 : http://blog.csdn.net/u012945598/article/details/38417333

在Cocos2d-x 2.x的版本号中,开发人员能够直接使用Box2d或chipmunk进行物理世界的模拟。

在第17篇教程(http://blog.csdn.net/u012945598/article/details/17787243)我们也以前介绍过Box2d物理引擎的使用,可是Box2d中的api对于刚接触物理引擎的开发人员来说仍然显得非常复杂。

在Cocos2d-x 3.0版本号中,Cocos2d-x对物理引擎的进行了封装,使其融入2d-x中,避免了开发人员直接使用物理引擎较为复杂的接口,使物理引擎的使用变得十分简单(眼下3.0版本号封装的是chipmunk物理引擎,该引擎在功能上不及Box2d,但使用方法简单)。

在2.x版本号中若要模拟一个物理世界并使精灵受到物理效果的影响大体须要例如以下几步:
(1) 创建一个物理世界。

(2) 创建物体(Body)。

(3) 创建夹具/框架(Fixture)。

(4) 创建关节(Joints)。

(5) 第四部可依据须要进行取舍,最后设置用户交互。

这样在2.x版本号中就能够模拟出来一个物理世界,碰撞检測可通过继承b2ContactListener重写BeginContact函数来实现。

在3.x版本号中,既然api已经被封装到引擎内的组件,使用时便无需那么麻烦了,但仍然须要几个步骤方可使用物理引擎。

(1) 使用Scene类的提供的工厂方法createWithPhysics()创建一个带有物理世界的场景。

(2) 使用PhysicsBody类创建物体,同一时候也对物体的夹具及形状进行了绑定。

(3) 使用Node类setPhysicsBody()方法将节点与物体绑定,即设置用户交互(Sprite,ImageView等均属于Node派生类,可訪问此方法)。

(4) 若有须要,使用PhysicsJointLimit类创建关节,将物体进行连接,将关节加入?到world就可以。

(5) 碰撞检測事件由EventListenerPhysicsContact监听,创建实例对象后设置对应的回调函数就可以。

虽然步骤看上去并未降低,但实际上在3.x版本号中使用物理引擎代码的复杂度要比2.x小的多。

以下写一个简单的Demo来模拟这个过程。

首先创建一个能够支持物理世界的场景。

以下创建一个边框,用来防止屏幕上的刚体受到重力影响掉出屏幕,EdgeBox默认不受重力影像(静态刚体),在物理世界中若想要物体不受影像可通过setGravityEnable(false)方法实现。

接下来在物理世界中再创建两个物体,并使用关节将它们连接起来

这个时候执行项目实际上就已经能够看到效果了,最后来加入?碰撞检測的事件。

此时执行项目能够看到效果图:

在上述过程中,我们所使用的碰撞体均为规则形状,然而在做精确碰撞检測时,所遇到的图形实际上大多为不规则图形,以下来演示不规则物体的创建。此处须要使用到一种工具,叫做VextexHelper

(下载地址:http://download.csdn.net/detail/u012945598/7725475)

下载之后解压,这个工具实际上就是一个Xcode下的project,打开project文件执行就可以,效果图例如以下:

对于上图绿色边框部分为笔者所画出的边缘,之后该程序会依据各个点生成一个数组。我们真正须要用到的就是红色矩形里面的坐标,当然这个格式跟我们实际上的格式有些出入,其实这个格式能够在该工具的代码中进行改动,使输出的类型变成Point。

将这些数据复制到我们的项目中就能够使用了:

执行效果例如以下:

最后,虽然Cocos对物理引擎进行了封装,但实际使用时须要注意的地方还有非常多地方。

时间: 2024-08-14 18:32:34

Cocos2d-x教程(30)-3.x版本号物理引擎的使用的相关文章

cocos2dx-3.x物理引擎Box2D介绍

物理引擎 Cocos2d-x引擎内置了两种物理引擎,它们分别是Box2D和Chipmunk,都是非常优秀的2D物理引擎,而且x引擎将它们都内置在SDK中.Box2D使用较为广泛,在这里选择Box2D来进行学习.  物理引擎模拟的内容: 重力:在游戏中模拟重力加速度,当游戏中人物跳跃起来后会受到重力影响而向下移动,在没有地面的场景,人物和物体会由于重力而做自由落体运动.牵引力(动力):在游戏中比如汽车的引擎,人物本身能够提供向前进行的动力,这种牵引力是持续不断地作用在物体上的,物体因此可以向作用力

Cocos2d-x教程(30)-3.x版本物理引擎的使用

欢迎加入Cocos2d-x 交流群:193411763 转载时请注明原文出处 : http://blog.csdn.net/u012945598/article/details/38417333 在Cocos2d-x 2.x的版本中,开发者可以直接使用Box2d或chipmunk进行物理世界的模拟. 在第17篇教程(http://blog.csdn.net/u012945598/article/details/17787243)我们也曾经介绍过Box2d物理引擎的使用,但是Box2d中的api对

物理引擎Havok教程(一)搭建开发环境

物理引擎Havok教程(一)搭建开发环境 网上关于Havok的教程实在不多,并且Havok学习起来还是有一定难度的,所以这里写了一个系列教程,希望可以帮到读者.这是第一期. 一.Havok物理引擎简单介绍       Havok引擎,全称为Havok游戏动力开发工具包(Havok Game Dynamics SDK),一般称为Havok,是一个用于物理系统方面的游戏引擎,为电子游戏所设计,注重在游戏中对于真实世界的模拟.使用碰撞功能的Havok引擎能够让很多其它真实世界的情况以最大的拟真度反映在

Cocos2d-js官方完整项目教程翻译:六、添加Chipmunk物理引擎在我们的游戏世界里

添加Chipmunk物理引擎在我们的游戏世界里         一.简介                   cocos2d JS能给我们力量来创造令人印象深刻的游戏世界.但缺乏某种现实.          虽然我们可以做复杂的计算,使游戏世界更真实的,但有另一个选择          它可以缓解我们的生活.答案是物理引擎.          物理引擎提供了重力,碰撞检测和物理模拟,可以使我们的游戏世界看起来更真实.          在本教程中,我们将介绍的ChipMunk的物理引擎进入我们的

物理引擎Havok教程

物理引擎Havok教程(一) 搭建开发环境 网上关于Havok的教程实在不多,而且Havok学习起来还是有一定难度的,所以这里写了一个系列教程,希望能够帮到读者.这是第一期. 一.Havok物理引擎简介       Havok引擎,全称为Havok游戏动力开发工具包(Havok Game Dynamics SDK),一般称为Havok,是一个用于物理系统方面的游戏引擎,为电子游戏所设计,注重在游戏中对于真实世界的模拟.使用碰撞功能的Havok引擎可以让更多真实世界的情况以最大的拟真度反映在游戏中

PS网页设计教程——30个优秀的PS网页设计教程的中文翻译教程

PS网页设计教程--30个优秀的PS网页设计教程的中文翻译教程 作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作诗也会吟". 下面是本系列的30个优秀PS网页设计教程的翻译教程,本人历时一年有余,翻译了这些教程.在翻译的过程中,重新截了中文版的图,也修正了一些参数,并给出了一些更好的技法的建议,更加适合新手上手练习,适合初学者临摹学习,也可以给有一定基础的设计者做个参考. 在这儿和广大网友交流,大家互相学习,互相

Quick-Cocos2d-x初学者游戏教程(八)----------------- 物理引擎和角色

Quick-Cocos2d-x初学者游戏教程(八) 续上章载入 TiledMap 背景后,接下来的这章我们将开始引入物理引擎相关的东西,并且会开始创建我们的游戏角色.游戏地图中各类障碍物和奖励品的创建则会留到下一章. 构建物理世界 首先,物理引擎是干什么的应该不用我说吧?好吧,还是说一下(百度的):物理引擎通过为刚性物体赋予真实的物理属性的方式来计算运动.旋转和碰撞反映.所以用它来模拟真实世界的飞行.掉落等功能是具有得天独厚的优势的,这也是为什么我们的游戏要使用它的原因. 然后,我们要怎样使用物

Box2D物理引擎模拟炸弹爆炸效果

今天咱们来模拟炸弹效果.于是问题一来了:"为什么要模仿这么暴力的效果呢?莫非几日不见,Yorhom人品煞变?" 其实玩过愤怒的小鸟的同学都应该对这种效果似曾相识,因为据非官方报道,第二厉害的小鸟--黑色鸟的特技就是自爆.问题二出现了:"那第一厉害的小鸟是哪一种呢?"据Yorhom我本人测试,那只红色大鸟应该是最厉害的,不过貌似没有特技?愤怒的小鸟这种肤浅的游戏,Y某我最擅长了,以后有时间会专门写写这个游戏的攻略.这两种鸟的靓照如下: 敷衍了问问题二的同学,问题三就来

Cocos2d-x 物理引擎及碰撞

基础知识: 1 #ifndef __HELLOWORLD_SCENE_H__ 2 #define __HELLOWORLD_SCENE_H__ 3 4 #include "cocos2d.h" 5 6 class HelloWorld : public cocos2d::Layer 7 { 8 private: 9 Size visibleSize; 10 public: 11 // there's no 'id' in cpp, so we recommend returning t