Cocos2d-x教程(30)-3.x版本号物理引擎的使用
转载时请注明原文出处 : 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对物理引擎进行了封装,但实际使用时须要注意的地方还有非常多地方。
Cocos2d-x教程(30)-3.x版本号物理引擎的使用的更多相关文章
- cocos2dx-3.x物理引擎Box2D介绍
理引擎 Cocos2d-x引擎内置了两种物理引擎,它们分别是Box2D和Chipmunk,都是非常优秀的2D物理引擎,而且x引擎将它们都内置在SDK中.Box2D使用较为广泛,在这里选择Box2D来进 ...
- Bullet物理引擎的安装与使用
图形赋予游戏一种视觉的吸引力,但是能够让游戏的世界鲜活起来的还应该是内部的物理引擎.物理引擎是游戏引擎中的子模块,是一种软件组件,可仿真物理系统.它根据牛顿力学定律,计算游戏中物体的合理的物理位置,并 ...
- 物理引擎Havok教程(一)搭建开发环境
物理引擎Havok教程(一)搭建开发环境 网上关于Havok的教程实在不多,并且Havok学习起来还是有一定难度的,所以这里写了一个系列教程,希望可以帮到读者.这是第一期. 一.Havok物理引擎简单 ...
- Cocos2d-js官方完整项目教程翻译:六、添加Chipmunk物理引擎在我们的游戏世界里
添加Chipmunk物理引擎在我们的游戏世界里 一.简介 cocos2d JS能给我们力量来创造令人印象深刻的游戏世界.但缺乏某种现实. ...
- PS网页设计教程——30个优秀的PS网页设计教程的中文翻译教程
PS网页设计教程--30个优秀的PS网页设计教程的中文翻译教程 作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作 ...
- [译]Vulkan教程(30)深度缓存
[译]Vulkan教程(30)深度缓存 Depth buffering 深度缓存 Introduction 入门 The geometry we've worked with so far is pr ...
- Directx教程(30) 如何保证渲染物体不会变形
原文:Directx教程(30) 如何保证渲染物体不会变形 在Directx11教程(6)中, 我们曾经实现过这个功能,但那时是在SystemClass中,处理WM_SIZE时候,重新调用m ...
- Cocos2d-x 使用物理引擎进行碰撞检测
[转自]: http://blog.csdn.net/cbbbc/article/details/38541099 通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵 ...
- 转:Bullet物理引擎不完全指南(Bullet Physics Engine not complete Guide)
write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 前言 Bullet据称为游戏世界占有率为第三的物理引擎,也是前几大引擎目前唯一能够 ...
随机推荐
- wchar_t是内置还是别名(亲测有效:wchar_t在windows下是16位整数的别名,在linux等平台下是32位整数的别名。MSVC2008开始默认是/Zc:wchar_t)
接前一篇C++ ABI之名字改编(以Qt为例),继续看看C++名字改编相关的问题. 问题 MSVC 有一对选项/Zc:wchar_t- 与 /Zc:wchar_t控制wchar_t 于是 wchar_ ...
- 在 Windows Azure 网站 (WAWS) 上对 Orchard CMS 使用 Azure 缓存
编辑人员注释: 本文章由 Windows Azure 网站团队的项目经理 Sunitha Muthukrishna 撰写. 如果您当前的 OrchardCMS 网站在 Windows Azure 网站 ...
- cmake 学习笔记(二)
在 Cmake学习笔记一 中通过一串小例子简单学习了cmake 的使用方式. 这次应该简单看看语法和常用的命令了. 简单的语法 注释 # 我是注释 命令语法 COMMAND(参数1 参数2 ...) ...
- BZOJ 1677: [Usaco2005 Jan]Sumsets 求和
题目 1677: [Usaco2005 Jan]Sumsets 求和 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 617 Solved: 344[Su ...
- iOS 开发 Message Digest Algorithm 5(MD5加密)
MD5的全称是Message Digest Algorithm 5(消息摘要算法第五版),是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.在90年代初由MIT Laboratory ...
- c++,命名空间(namespace)
1.什么是命名空间: 命名空间:实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来. 2.命名空间 ...
- Chapter 6 装饰模式
修饰模式,是面向对象编程领域中,一种动态地往一个类中添加新的行为的设计模式.就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个类添加一些功能. 例如:DataOutputStrea ...
- Qt对话框_模态/非模态
对话框在Qt GUI应用程序中有着广泛的用途,对话框有模态.非模态两种情况. 对于参数选择的对话框,一般用模态对话框:对于显示或查看某些内容的对话框,一般用非模态对话框. 对话框类QDialog,官方 ...
- 安装Devstack的DNS问题
所谓的OpenStack一键安装,省去了敲键盘的麻烦,但是卡在中间出了问题也是比较尴尬的 在公司内安装经常会出现卡在下载软件的地方,有时候还会出错 trick就是换一个US的dns,比如8.8.8.8
- Android中的单元测试
2015年5月19日 23:10 在Android中,已经内置了Junit所以不需要在导包.只要继承AndroidTestCase类就可以了. 首先需要修改AndroidManifes ...