[cocos2d-x]怎样降低cocos2d-x游戏的耗电量?
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主界面半个小时,手机都是冰凉冰凉的:)
[cocos2d-x]怎样降低cocos2d-x游戏的耗电量?的更多相关文章
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(四)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在打开MainScene.m文件,首先设置实例变量: @imp ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先说一下为什么要转换,这是为了后面的A*寻路算法做准备.由于在 ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(八)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 回到Xcode中,新建一个EndLayer类,继承于CCNode ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(六)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在Xcode中打开MainScene.h文件,在接口中添加2个方 ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(五)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了暂时不影响原来的cat移动方法,我们在CatSprite.m ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(七)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 打开SpriteBuilder,在文件视图中新建一个文件夹Fon ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(三)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面看一下CatSprite中最复杂的moveToward方法, ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(二)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先在CatMazeV3中新建CatSprite类,继承于Spr ...
- cocos2D(二)---- cocos2D文档的使用
在使用cocos2d进行游戏开发的过程中,难免要查阅cocos2d的API文档.搞清楚怎么使用某个类或者某个方法.幸运的是,cocos2d的作者已经在源码里面加入了文档凝视,我们仅仅须要使用文档生成工 ...
随机推荐
- cs229_part6
part 6 接下来就是无监督学习算法了. k均值聚类 问题背景 样本集描述: \[ x\in D, x\in R^n \] 之前的有监督学习问题中,所有的x都有对应的y.但是如果我们的x没有对应的y ...
- 代理授权验证_web客户端授权验证
HTTPPasswordMgrWithDefaultRealm() HTTPPasswordMgrWithDefaultRealm()类将创建一个密码管理对象,用来保存 HTTP 请求相关的用户名和密 ...
- URI URL URN 关系
我们一起来看下面这个虚构的例子.这是一个URI: http://bitpoetry.io/posts/hello.html#intro 我们开始分析 http:// 是定义如何访问资源的方式.另外 b ...
- vue 判断属性是否为object
//递归对象 var recursiveObject = Vue.extend({ name: 'recursive-object', template:[ '<ul>', '<li ...
- UI测试点
UI测试点 1.界面是否美观 2.元素大小 3.界面元素是否对齐方式统一 4.界面字体属性是否正确 5.界面链接及触发动作 6.元素内容是否显示正确.易懂.友好 7.所有输入框进行输入判断测试 8.所 ...
- vmware安装CentOS " Intel VT-x 处于禁用状态"
我刚用虚拟机vmware 11安装CentOS 7 ,出现错误“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题,如下图. Intel VT-x 即Virtualiza ...
- tensorflow在各种环境下搭建与对比
tensorflow在各种环境下搭建与对比 由于有些训练是要长时间进行训练(几天),才能看出显著的结果,如果只是通过本地的计算机进行训练是不可能的.因此这周花了一些时间调研如何才能让神经网络长时间的进 ...
- java第五章 子类与继承
5.1子类与父类 1 java不支持多重继承,即一个子类不可以从多个父类中同时继承,而C++中可以. 人们习惯地称子类与父类的关系式“is—a”的关系 2 再类的声明过程中,通过关键字exte ...
- 最近项目中公用的JS
var closeid = 1; var isneedpwd = 0; var editor1; var NoCheckUrl = 0;//适用于框架 不验证权限 !=0验证 function Erp ...
- 【2018.11.23】2018WCTest(8)
T1 小 $X$ 无敌就是指他的防御 $\ge$ 怪物的攻击 $n$.另外小 $X$ 最多只需要把攻击加到怪物的防御 $k$,此时已经能一招秒一个,再多加必定无用且需承受更多伤害. $20$ 分 $d ...