位置: 编程技术 - 正文

浅谈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运行原理)

  • php连接数据库代码应用分析(php连接数据库代码是什么)

    php连接数据库代码应用分析(php连接数据库代码是什么)

  • php_pdo 预处理语句详解(php预处理查询)

    php_pdo 预处理语句详解(php预处理查询)

  • SQL Server 数据库分离与附加 就这么简单!(sqlserver数据库和mysql区别)

    5. 在下图的分离数据库窗口中列出了我们要分离的数据库名称。请选中“更新统计信息”复选框。若“消息”列中没有显示存在活动连接,则“状态”列显示为“就绪”;否则显示“未就绪”,此时必须勾选“删除连接”列的复选框。

    6. 分离数据库参数设置完成后,单击底部的”确定”按钮,就完成了所选数据库的分离操作。这时在对象资源管理器的数据库对象列表中就见不到刚才被分离的数据库名称student_Mis了(如下图)。

    三、附加数据库

    1. 将需要附加的数据库文件和日志文件拷贝到某个已经创建好的文件夹中。出于教学目的,我们将该文件拷贝到安装SQL Server时所生成的目录DATA文件夹中。

    2. 在下图窗口中,右击数据库对象,并在快捷菜单中选择“附加”命令,打开“附加数据库”窗口。

    3. 在“附加数据库”窗口中,单击页面中间的“添加”按钮,打开定位数据库文件的窗口,在此窗口中定位刚才拷贝到SQL Server的DATA文件夹中的数据库文件目录(数据文件不一定要放在“DATA”目录中),选择要附加的数据库文件(后缀.MDF,如下图)。

    4. 单击“确定”按钮就完成了附加数据库文件的设置工作。这时,在附加数据库窗口中列出了需要附加数据库的信息(如下图)。如果需要修改附加后的数据库名称,则修改“附加为”文本框中的数据库名称。我们这里均采用默认值,因此,单击确定按钮,完成数据库的附加任务。

    完成以上操作,我们在SSMS的对象资源管理器中就可以看到刚刚附加的数据库student_Mis (如下图)。

    以上操作可以看出,如果要将某个数据库迁移到同一台计算机的不同SQL Server实例中或其它计算机的SQL Server系统中,分离和附加数据库的方法是很有用的。

    深入浅析SQL封装、多态与重载 面向对象1.类:众多对象抽象出来的2.对象:类实例化出来的3.类的定义关键字class4.类里面包含成员变量成员属性成员方法5.面向对象三大特性(1)封装

    在Sql Server中调用外部EXE执行程序引发的问题 一、先开启xp_cmdshell打开外围应用配置器—功能的外围应用配置器—实例名DatabaseEnginexp_cmdshell—启用二、解决方法usemasterExecxp_cmdshell'mkdird:csj" class="img-responsive" alt="SQL Server 数据库分离与附加 就这么简单!(sqlserver数据库和mysql区别)">

    SQL Server 数据库分离与附加 就这么简单!(sqlserver数据库和mysql区别)

  • MySQL 5.7 zip版本(zip版)安装配置步骤详解(mysql 5.7.32)

    MySQL 5.7 zip版本(zip版)安装配置步骤详解(mysql 5.7.32)

  • 释放增加win2003系统的内存的方法让内存多空些出来(下列哪种情况能使血管升压素释放增加)

    释放增加win2003系统的内存的方法让内存多空些出来(下列哪种情况能使血管升压素释放增加)

  • 为什么WINDOWS在运行里输入IP地址不能访问网络位置的解决办法(windows为什么会成功)

    为什么WINDOWS在运行里输入IP地址不能访问网络位置的解决办法(windows为什么会成功)

  • Python实现多进程共享数据的方法分析(python多进程编程)

    Python实现多进程共享数据的方法分析(python多进程编程)

  • Unity Assets目录下的特殊文件夹名称(unity中assets文件夹的作用)

    Unity Assets目录下的特殊文件夹名称(unity中assets文件夹的作用)

  • 企业自建房屋
  • 暂估入库收到发票后怎么做分录
  • 房屋租赁的发票备注怎么写
  • 小规模没有成本票企业所得税怎么办呀
  • 外贸企业申报出口退税时的会计分录
  • 固定资产减值必有损益吗
  • 以前年度损益调整会计分录
  • 已认证抵扣的发票如何红字信息表
  • 发生成本支出发票未到
  • 股东往来款怎么处理
  • 企业资产业务收购税务处理怎么做?
  • 别人给的发票一直不开
  • 公司注销固定资产交什么税
  • 公司是否可以开电子发票
  • 其他应收款如何调平分录
  • 对公账户的利息收入如何入账
  • 资产和利润表的关系
  • 商业土地厂房办公房过户需要交什么税?
  • 高新企业研发人员
  • 房屋拆迁过渡费由哪个部门发
  • win7怎么输入命令
  • 年末利润分录
  • 应交企业所得税和所得税费用区别
  • 电脑每次开机都要磁盘检查是什么原因
  • php中split
  • 抵扣农产品进项税时,也要抵扣运费吗
  • rnbrcache.exe是什么意思
  • 抵债资产的账务处理
  • 关于固定资产抵扣的税务规定
  • 企业接受现金捐赠要交税吗
  • 夜间潜水时发现水体
  • 混合销售行为的税务处理
  • php ffi 性能
  • 卡拉公路
  • php文件上传用什么请求方法
  • 城市维护建设税减免税优惠政策
  • 微信小程序授权管理在哪里
  • ajax获取php数据
  • 贸易企业开发下游业务
  • 员工出差过程中意外死亡算工伤吗
  • 亏损弥补规定
  • 企业内部培训费用
  • 数论电子书下载
  • mongodb从入门到商业实战
  • 让渡资产属于什么
  • 破产清算不够支付员工补偿金
  • 技术维护费可以全额抵扣吗
  • SQL Server 2008 数据库有哪些版本?
  • java实现打印
  • 管理费用科目包括
  • 外购无形资产的增值税计入成本吗
  • 个税汇算清缴什么意思?
  • 退了的社保能申请回来吗
  • 汇算清缴弥补以前年度亏损多少年
  • 退回多交的所得税怎么退
  • 净利润为负数会计分录
  • 企业间借贷是否合法2018
  • 合资公司政策
  • 红冲发票金额大于原发票金额
  • 会计当期损益指什么
  • 其他非流动资产包括哪些
  • 企业建账的流程是怎样的
  • MySQL部署时提示Table mysql.plugin doesn’t exist的解决方法
  • Ubuntu安装ssh
  • win7旗舰版和家庭版哪个对电脑要求低
  • win7修改系统版本
  • win7系统换桌面
  • mac快捷键一览
  • find.exe应用程序错误
  • 开关光驱是平移还是旋转
  • 简单解析空中三角测量的意义
  • visual studio 10 cocos2dx项目移植到eclipse的android项目(配置请参照上一篇文章开发环境搭建)
  • shell脚本实现自动化巡检报警发送邮箱
  • vim命令详解
  • Python安装包
  • jquery实现下拉菜单
  • js函数详解
  • 税务稽查条例操作规程
  • 怎么打印纳税申报清单
  • 全国增值税发票查验平台官网手机
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设