位置: 编程技术 - 正文

Cocos2dx物理引擎(一)(cocos2d-x引擎)

编辑:rootadmin
&#;&#;cocos2dx在设计之初就集成了两套物理引擎,它们是box2d和chipmunk。我目前使用的是最新版的cocos2dx 3.2。引擎中默认使用的是chipmunk,如果想要改使用box2d的话,需要修改对应的android工程或者是ios工程的配置文件。

推荐整理分享Cocos2dx物理引擎(一)(cocos2d-x引擎),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos3d物理引擎,cocos引擎使用教程,cocos引擎使用教程,cocos2d-x引擎,creator物理引擎,cocos creator物理引擎,cocos3d物理引擎,cocos creator物理引擎,内容如对您有帮助,希望把文章链接给更多的朋友!

  在2.x版本的cocos中,使用物理引擎的步骤十分繁琐。但在3.x版本中变得非常方便了。我这次的学习目标是制作一个打砖块的小游戏。

  首先,现在的Scene类提供了一个静态工厂方法,用以创造一个集成物理引擎的场景。  

  这个方法能让你的场景具备创建物理世界的基本条件,接下来我们设置这个物理世界的重力条件,因为打砖块游戏中不需要重力的影响,所以我们把该场景里的重力设置为0:

  然后我们要给这个物理世界创造一个边界,便于我们观察效果,我的做法是把物理世界的scene和游戏逻辑的实现分开,新建一个继承自layer的类来写游戏逻辑:

  这是头文件:

  小提示:在3.2版本的物理世界中我们不能使用scheduleupdate()函数,&#;乎body(刚体)的运动是在update里处理的,一旦我们重写了这个函数,物理世界中的小球就不再运动了。所以我们另外设置一个定时器update1来使用。

  这是cpp文件:

  这里对代码中的标注进行一些解释:

  标注1:关于接触掩码&#;。在3.0中的事件分发机制都由事件派发器管理,所以物理引擎的碰撞事件也不例外。 下面代码注册碰撞响应事件和回调函数

  每一次碰撞检测事件是有EventListenerPhysicsContact来进行监听的。监听到碰撞事件时,会回调响应事件onContactBegin()来进行碰撞事件的处理。_eventDispatcher是事件派发器,由它管理所有的注册事件。 EventListenerPhysicsContact是碰撞检测中的一种,也可以运用EventListenerPhysicsContactWithBodies,EventListenerPhysicsContactWithShapes,EventListenerPhysicsContactWithGroup 来进行碰撞事件的注册,对你你感兴趣的bodys,shape和group事件进行监听。   

  在上面说了这么多的东西,最重要的东西就是下面的,没有下面的东西,碰撞事件根本不起作用,这就是我第一次运用碰撞时遇到的问题。也就是设置物理接触相关的位掩码&#;,默认的接触事件不会被接受,需要设置一定的掩码&#;来使接触事件响应。 接触掩码&#;有三个&#;,分别是:

  1、CategoryBitmask,默认&#;为0xFFFFFFFF

Cocos2dx物理引擎(一)(cocos2d-x引擎)

  2、ContactTestBitmask,默认&#;为 0x

  3、CollisionBitmask,默认&#;为0xFFFFFFFF 这三个掩码&#;都有对应的set/get方法来设置和获取。

  这三个掩码&#;由逻辑与来进行操作测试。   一个body的CategoryBitmask和另一个body的ContactTestBitmask的逻辑与的结果不等于0时,接触事件将被发出,否则不发送。   一个body的CategoryBitmask和另一个body的CollisionBitmask的逻辑与结果不等于0时,他们将碰撞,否则不碰撞   默认情况下的body属性会进行物理碰撞,但不会发送碰撞检测的信号,也就不会响应碰撞回调函数,这个可以看下默认情况下的掩码&#;的逻辑与

  CategoryBitmask = 0xFFFFFFFF;  ContactTestBitmask = 0x;  CategoryBitmask & ContactTestBitmask = 0,所以不会发送碰撞信号   CollisionBitmask = 0xFFFFFFFF;  CategoryBitmask & CollisionBitmask = 0xFFFFFFFF,所以物体会碰撞,但是不会响应碰撞回调函数。

  上面介绍的掩码&#;是碰撞检测回调中最重要的,没有上面的掩码&#;,所有的碰撞回调函数都不会发生。 EventListenerPhysicsContact有四个接触回调函数:

  1、onContactBegin,在接触开始时被调用,仅调用一次,通过放回true或者false来决定两个物体是否有碰撞。同时可以使用PhysicsContact::setData()来设置接触操作的用户数据。当返回false时,onContactPreSolve和onContactPostSolve将不会被调用,但是onContactSeperate将被调用一次。

  2、onContactPreSlove ,会在每一次被调用,通过放回true或者false来决定两个物体是否有碰撞,同样可以用ignore()来跳过后续的onContactPreSolve和onContactPostSolve回调函数。(默认返回true)

  3、onContactPostSolve,在两个物体碰撞反应中的每个步骤中被处理调用。可以在里面做一些后续的接触操作。如销毁body

  4、onContactSeperate,在两个物体分开时被调用,在每次接触时只调用一次,和onContactBegin配对使用。 上述中最重要的就是碰撞检测事件的讲解,这是游戏中用到碰撞经常要用到的。  这里附上一篇博文,详细的讲解了3.x的碰撞机制:  标注2:据我这两天的实验来看,在mac下和windows下使用物理引擎产生的效果有巨大的差别。很多博客上的代码都是在windows上能够流畅运行,但是在mac上跑就会有很多问题。

  比如,行的ballBody->applyImpulse(force)。在windows下只要使用applyForce就可以了,但是在mac下使用applyForce函数会让球的运动越来越快,没多久便会因为速度超过帧数飞出我们设置的边界。

  再比如,update1中的代码,这是为了保证能一直保持匀速运动而写的,在windows下完全不需要这些代码,但是在mac下如果没有,小球会在某次碰撞时候损失速度(随机的,有时不会损失),直至停下来。

  这篇博文就到这里,下面附上截图:

  

coco2dx 学习笔记 -- 进度动画 ccProgressTimer ccProgressTo ccProgressFromTo ccProgressTimer是进度条类,代表了一个进度条,进度条,分两种,一种是条形的进度条,一种是圆形的进度条。ccProgressTo是进度动画类,从零播放到指定

Cocos2dx 3.2移植到Android 完全可行的方法 非常感谢原作者,我按照他写的确实成功了,期间遇到一些问题也修改了下写下来,方便后来者。点击看原文。1、安装JDK(这个不多说了,你行的)2、

cocos2dx 按钮随按下切换图标 1、使用MenuItemToggleautoitem4=MenuItemToggle::createWithCallback(//按钮事件监听CC_CALLBACK_1(HelloWorld::menuCallback,this),//默认按钮图标CCMenuItemImage::create("musicopen.png","music

标签: cocos2d-x引擎

本文链接地址:https://www.jiuchutong.com/biancheng/368789.html 转载请保留说明!

上一篇:cocos2d-lua 学习笔记—1(cocos2dx4.0入门)

下一篇:coco2dx 学习笔记 -- 进度动画 ccProgressTimer ccProgressTo ccProgressFromTo(cocos2d-x教程)

  • 税务机关代码怎样查询
  • 出口退税申报软件实际操作视频
  • 六税一费优惠政策
  • 一般纳税人没有进项怎么交税
  • 失业保险稳岗返还是政府补助吗
  • 会计净额法和总额法
  • 技术服务公司可以卖材料吗
  • 企业所得税纳税人包括哪些类型
  • 生产企业出口货物会计分录
  • 现金日记账支出和收入表格怎么做
  • 技术出口税务处理
  • 事业单位破产清算程序规定
  • 航天金税服务费诈骗
  • 物料损耗会计分录
  • 境内机构经常项目外汇账户
  • 小微企业季度缴税一百万退税吗
  • 一般纳税人 开以前的税率
  • 对公提回款是什么意思
  • 经营范围外的业务可以开发票吗
  • 印花税申报数据来源
  • 出口退税的钱退到哪里了
  • b4纸张尺寸
  • safari下载的文件怎么删除
  • 支付商业保险费属于什么现金流量项目
  • Win10 Build 19043(21H1最新版)即将推送 更新内容汇总
  • 关于幼儿园会没课程的会刊
  • php require的用法
  • 发票与付款金额不一致违法吗
  • 生产性生物资产折旧账务处理
  • 申请代开增值税专用发票有金额限制吗
  • 固定资产维修费计入固定资产吗
  • php读取json数组中指定内容
  • 【torch.nn.Parameter 】参数相关的介绍和使用
  • pytorch1.9.0
  • 收付控制状态不正常
  • 图像可以分成哪些类别?
  • 研发支出资本化支出属于什么科目
  • 管理不善造成的货物损失进项税可以抵扣吗
  • php网站漏洞
  • 长期待摊费用的账务处理
  • 送货单和收款收据的区别
  • SQL2005 自动备份的脚本
  • mysql错误日志在哪里
  • 可供出售金融资产属于什么科目
  • 春节法定假加班费政策依据
  • 税法中特许权费包括哪些
  • 将自产的产品用于非应税项目
  • 机械租赁公司需要什么证件
  • 金蝶k3怎么新增会计科目
  • 错帐的查找方法
  • 预收账款是否要交说
  • 员工办理健康证介绍信模板
  • 冲销以前年度多计提的折旧
  • 私营企业主的现金流特征
  • 企业内建立小企业属于哪个阶段
  • mysql数据库中文
  • windows更新9%
  • windosxp无法启动
  • 苹果电脑邮箱添加163邮箱
  • 怎样升级智慧中小学版本软件
  • win10系统回收站在哪
  • win73d设置怎么设置
  • 如何解决windows无法连接到打印机
  • win10预览版和正式版区别
  • 用centos搭建服务器的详细教程
  • 如何升级win10专业版
  • 微软官方确认:Xbox不会出现在E3 2023实体展
  • windows7看视频黑屏
  • win7笔记本触摸板怎么开启
  • 2015.3.25--2.cocos精灵移动 动画控制(一)
  • perl删除文件夹
  • 如何用vs默认打开unity脚本
  • css下margin、padding、border、background和font缩写示例
  • git pull could not read from remote repository
  • 浙江国税局电子税务局
  • 以划拨方式取得的土地使用权
  • 收到税务局税收返还
  • 纳税人逾期未申报的原因有哪些
  • 个人所得税怎么申报
  • 徐州国税局班子成员名单
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设