位置: 编程技术 - 正文

浅谈cocos2dx手游开发CPU发热严重之见(cocos 2dx)

编辑:rootadmin

推荐整理分享浅谈cocos2dx手游开发CPU发热严重之见(cocos 2dx),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos2dx开发的游戏有哪些,cocos2dx还有人用吗,cocos 2dx,cocos2d rpg,cocos2dx游戏,cocos2dx游戏,cocos2dx游戏,cocos2d手机版,内容如对您有帮助,希望把文章链接给更多的朋友!

猜测它有可能是在主循环里使用了 Sleep(0), 一搜,果然定位到具体代码,它位于 cocos2dxplatformwinCCApplication.cpp,大致长像如下:

1while( 1 ) {2if( 有消息 ) {3if( 时间到 ) 更新计时, call 主循环函数;4else Sleep(0);5}6// 其他跳出循环判断代码7}

也就是说,该循环除了执行 mainLoop 以外,花了大量时间在 检查消息和 Sleep(0) 上面。

并且,我还发现一个奇怪的现象(暂时还不清楚是为什么),即:

HelloCPP 项目的 AppDelegate.cpp 文件中有一行代码:

// set FPS. the default value is 1.0/ if you don't call thispDirector->setAnimationInterval(1.0 / );

  

上面的 ,如果改大,不起任何作用,帧速始终是 不会变。但如果改到小于,是可以起作用的。

于是,解决 CPU 占用的思路,始于 “是否可以降低循环精度” 的念头。

已知正常情况下,执行 Sleep(1) ,会睡大概 1/ 秒,这个时间并不精确也不准确,看上去无法满足 fps 这个流畅度需求。不过,如果游戏运行帧速不需要这么高,比如 fps ?? 则该方案大为可行。

浅谈cocos2dx手游开发CPU发热严重之见(cocos 2dx)

经实际测试,将 Sleep(0) 改成 Sleep(1), 再将上面代码中的 改成 , 效果非常显著。但另一个问题来了:如果每游戏循环做的事有点多,时间有点长,那么游戏将被拖慢。

原engine中,同步时间的代码如下:

QueryPerformanceCounter(&nNow);if (nNow.QuadPart - nLast.QuadPart > m_nAnimationInterval.QuadPart) {nLast.QuadPart = nNow.QuadPart;

  

因为每次在 nLast 中记录 nNow 时间,并用时间差与设定间隔作比较,时间差往往会比设定间隔要大,如果是在不精确的 Sleep(1) 以及每循环负担比较大的情况下,将导致每帧实际所花的时间,会超出设定间隔不少,从而拖慢游戏速度(如果游戏按帧步进计时的话)。

为解决这个问题,我用的是时间对齐的方式。其实就是改了一下更新 nLast 的表达式:

nLast.QuadPart = nNow.QuadPart - (nNow.QuadPart %m_nAnimationInterval.QuadPart);

  

这样每帧的总消耗时间就相当的恒定了。

上面的问题解决并不算太完美。如何保持 fps 也能 cpu 0% 占用呢? 我考虑的方案是修改 Sleep(1) 的精度。

找了一下资料,发现 Winmm.lib 库中有 timeBeginPeriod(1); timeEndPeriod(1); 函数可以用于该目的,令 Sleep(1) 的精度提升到1毫秒级别,遂动手改之:

1. 添加 Winmm.lib 库的引用。我在这里采取了在 CCApplication.cpp 头部添加 #pragma comment(lib, "Winmm.lib") 语句的方式。

2. 在 while(1) 代码段的前后,分别放上 timeBeginPeriod(1); timeEndPeriod(1); 语句

这样就算完工了。

Cocos2dx的内存优化总结 1加载图片过程优化问题:以cocos2dx2.x为例,创建精灵CCSprite的过程中会创建一个CCImage,所以短时间会占用2倍内存,所以应避免连续加载(同一帧内,加

cocos2dx 3.3 tilemap 缩放滑动并且准确点击对象 之前已经有一篇更基础的tilemap笔记了,这两天用了下3.3的tilemap发现以前有些东西又套用不了。所以又写了一篇札记,顿时感觉自己萌萌哒。完全没有玩

cocos2dx 制作特效文本 原理:1.先在RenderTexture上渲染文字2.通过RenderTexture:newImage来获取到Image并依此得到对应的Texture3通过Texture构造Sprite,将生成的Sprite作为ClippingNode的模板(st

标签: cocos 2dx

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

上一篇:Bullet(Cocos2dx)之封装PhysicsWorld3D

下一篇:Cocos2dx的内存优化总结(cocos2dx运行原理)

  • 海关缴款书上完税怎么办
  • 个人所得税既有租房又有房贷
  • 按适用税率征税销售额等于销售收入吗
  • 小规模纳税人进项发票怎么做账
  • 加油卡充值可以退吗
  • 房租确认后能不退押金吗
  • 即征即退收入要交税吗
  • 报关单境外收货人和合同不一致
  • 不动产折旧年限的规定
  • 员工报销汽油费可以抵扣进项税吗
  • 跨年的材料专票怎么做会计分录?
  • 公允价值变动损益借贷方向
  • 差额事业单位的工资是由财政开支吗
  • 房产公司办公室布局
  • 企业法人不是实际老板怎么办
  • 单位员工借款的认定
  • 个人境外收入如何开发票
  • 机动车销售统一票据可以抵扣吗
  • 哪些搬迁情形属于“政策性搬迁”?所得税怎么处理?
  • 委托加工费的增值税计入成本吗
  • 利润分配的途径
  • 专家费收取多少合适
  • 社保缴费申报表文件
  • 城市维护建设税计算公式
  • 华为mate刷机能刷用户锁吗
  • 王者荣耀怎么解除关系
  • 实收资本或股本账户属于企业的什么账
  • 违约金合同条款怎么写
  • php数组函数,选班长
  • 申请一般纳税人公司流程
  • win10商店无法加载
  • 银行存款总账怎么登记图片
  • php 智能家居
  • 增值税怎样计算
  • wordpresscom
  • update-initramfs -u命令
  • 重复上次命令
  • 企业转让无形资产取得的收益应计入营业外收入
  • 织梦官方网站
  • 金蝶专业版利润表怎么生成
  • 一般纳税人和小规模纳税人的区别
  • 当月购进原材料取得税控专用发票
  • 中级会计报名必须用电脑吗
  • 冲销坏账怎么做分录
  • 发票金额比实际付款多怎么做账
  • 周转材料计入现金流量表
  • 展览门票收入按什么征税
  • 税前扣除项目主要包括
  • 商贸公司会计成本核算方法
  • 返聘退休人员工资标准
  • 职工薪酬包括哪四项内容
  • 企业公司制改建的有关规定
  • navicat查询结果下面输出栏如何关闭
  • virtualbox?
  • linux怎么和window系统共用
  • micc是什么意思中文
  • linux wc命令如何实现
  • 怎么给文件夹设置密码保护
  • Serv-U 构建个人FTP服务器图解
  • win10一年更新几次
  • Win7系统如何清除流氓屏保
  • win8鼠标速度怎么调
  • 计算机图形学考研院校
  • js常用的设计模式
  • prize draw是什么意思
  • js实现日历可获得的信息
  • jquery源码是什么水平
  • node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE的解决方法
  • 请问在javascript程序中
  • javascript cookbook
  • android刷新activity
  • jQuery插件cxSelect多级联动下拉菜单实例解析
  • 光伏发电要交税不
  • 技术咨询服务费税率
  • 施工企业建筑机械管理机构主要职责是负责建筑机械的
  • 飞机票其他税费包括什么内容
  • 八戒财税主要做什么
  • 同比减少怎么计算出来
  • 营业费用指哪些
  • 所得税汇算清缴退税税务局要来查账
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设