Cocos2d-x游戏的耗电量一直是个让人头疼的问题,一个简单的三消游戏,玩一会手机就热得发烫,更郁闷的是电池消耗非常快。基本上两个小时就能够把电池耗光。

近期又看到一个帖子。有个老外用cocos2d-x在安卓上移植了2048这个小游戏,一切顺利。除了手机会发烫。

看来这确实是一个让人非常不爽的问题。

我曾经做过windows桌面系统,知道在windows上。屏幕不会每帧都全屏重绘,而是提供一个WM_PAINT消息,windows GPU驱动程序通过这个消息,能够获得须要重绘的区域。这样就能够降低GPU的负荷。但我查了一下opengl的文档。貌似不支持区域重绘,(这但是MS Windows的核心技术哦)。cocos2d-x底层是用opengl实现的,也无法通过区域重绘来优化了。

还有没有其它办法? 我研究了一下引擎代码。发现引擎的主绘制流程非常easy,就是以固定的60fps重绘屏幕,即使是精巧的屏幕,也是不变的60fps。事实上这里是能够优化的,全然精巧的画面,就不要刷新了!我改动了一下代码。做了一些測试,的确能够实现:在director类中添加一个dirty重绘标志,每帧绘制前都检測一下,没有置上就跳过这帧。

那么,什么时候须要设置重绘标志呢? 就是屏幕上的图像发生变化的时候(好像是废话...)。cocos2d-x通过两个方法来产生动画。一个是action(比方Move)。一个是event(比方Touch)。标准的action都是通过ActionManager来管理的。所以仅仅要在ActionManager的update()函数中设置重绘就可以,event是通过eventDispatcher统一管理的,也能够在这个类统一设置。

代码就不贴了,能够看这个PR:https://github.com/cocos2d/cocos2d-x/pull/6178

可是,假设你不通过action和event来更新图像。比方说直接设置节点的位置。或者自己定义schedule回调函数,就须要自己设置重绘标志。

Ricardo大神也赞成这个功能。并且建议在node visit函数中实现。这样重绘标志就对引擎用户全然透明了,只是这个feature要到3.1的时候才会正式公布,有兴趣的童鞋能够自己合并这个PR先尝试一下。

我自己測试的情况。优化之后,跑testcpp主界面半个小时,手机都是冰凉冰凉的:)

最新文章

  1. FastDFS 安装及使用
  2. linux 压缩文件的命令总结
  3. JAVA基础知识之List集合
  4. 让EntityFramework6支持SQLite
  5. 第一百九十四天 how can I坚持
  6. S3C2440触摸屏控制总结
  7. Java处理文件小例子--获取全国所有城市的坐标
  8. solr源码导入eclipse
  9. CSS---input标签注意
  10. .Net Core 上传图片
  11. ctrl+alt+F1~6进入不了字符界面,黑屏的解决办法
  12. windows安装zookeeper
  13. 微软SSAS 错误 Internal error: Invalid enumeration value. Please call customer support! 不是此元素的有效值。
  14. Flask路由
  15. Swagger UI 传入对象类型参数
  16. 二维树状数组poj1195
  17. Shell学习笔记一
  18. A1019. General Palindromic Number
  19. 7、完整版的strcpy函数
  20. twisted如何生成deferred的

热门文章

  1. python基础知识14-正则表达式
  2. DELL R730 服务器拷贝大文件
  3. git 打补丁,即git review之后需要二次修改并提交代码
  4. 洛谷 P4961
  5. android 之 Dialog
  6. windows phone 网络开发三部曲(一)各种包的各种抓法
  7. SAXException Parser configuration problem: namespace reporting is not enabled
  8. Java日志实战及解析
  9. 九度oj题目1009:二叉搜索树
  10. Subsequence(hdu 3530)