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

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)方法实现。



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


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



此时执行项目能够看到效果图:
Cocos2d-x教程(30)-3.x版本号物理引擎的使用

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

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

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

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

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

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

执行效果例如以下:

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


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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118320.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • (转载)详细设计-盒图 PAD图 过程设计语言

    (转载)详细设计-盒图 PAD图 过程设计语言(转载)详细设计-盒图PAD图过程设计语言1、详细设计的任务(主要工作)有哪些?详细设计的工作:确定应该怎样具体地实现所有要求的系统,也就是说经过这个阶段的设计工作,应该得出目标系统的精确描述。设计得到的结果是确定每个模块内部的算法和数据结构,产生描述各模块处理过程的详细文档。2、软件详细设计描述工具的概念和使用:程序流程图、N-S图、PAD图、PDL语言:什么是,基本符号和表…

    2022年8月13日
    9
  • 4G网络架构_三大网络架构

    4G网络架构_三大网络架构1,4G是第四代移动通信技术,该技术包括TD-LTE和FDD-LTE两种制式,严格意义上来讲LTE只是3.9G,只有升级版的LTEAdvanced才满足国际电信联盟对4G的要求。4G是集3G与WLAN于一体,并能够快速传输数据、高质量、音频、视频和图像等。4G能够以100Mbps以上的速度下载,比目前的家用宽带ADSL(4兆)快25倍,并能够满足几乎所有用户对于无线服务的要求。

    2022年9月21日
    4
  • DELPhI XE5 控件

    DELPhI XE5 控件Raize Components v6.1.5 + serial〖支持D7~XE5〗含序列号:EXE安装程序傻瓜安装即可http://download.csdn.net/detail/wozengcong/6356865EhLib v6.2.149 for D7-XE5〖最新版本 含源码和DEMO〗:EXE安装程序傻瓜安装即可http://download.csdn.net/det

    2022年7月18日
    16
  • libiconv.a_libiptc

    libiconv.a_libiptc来源:’http://dxwang.blog.51cto.com/384651/538113介绍由于历史原因,国际上的各国文字都是依赖于自己本国语言而编码的。后来,随着Internet的出现和各国之间逐渐频繁的文字交流(比如浏览国外的Web页面),编码之间的转换就显得非常重要。这时也出现了一个问题,很多字符在一种编码中出现而没有被另一种编码包含。为了解决这种编码带来的混乱,人们

    2025年6月10日
    3
  • PHP5.6 和PHP7.0区别

    PHP5.6 和PHP7.0区别

    2021年11月5日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号