博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[cocos2d-x]怎样降低cocos2d-x游戏的耗电量?
阅读量:6690 次
发布时间:2019-06-25

本文共 1008 字,大约阅读时间需要 3 分钟。

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主界面半个小时,手机都是冰凉冰凉的:)

转载地址:http://enhao.baihongyu.com/

你可能感兴趣的文章
一种模仿线程的Javascript异步模型设计&实现
查看>>
bzoj 2784 [JLOI2012]时间流逝——树上高斯消元
查看>>
jQuery的一些一些小知识点的用法的介绍
查看>>
gdb调试
查看>>
在ListActivity底部添加一个不动的button解决办法
查看>>
lsof命令
查看>>
mongodb启动后打不开http://127.0.0.1:28017/
查看>>
iPhone上划动事件--UISwipeGestureRecognizer
查看>>
OD调试2---TraceMe
查看>>
Linux C single linked for any data type
查看>>
单元测试本质:面向逻辑块
查看>>
个人觉得还可以的php代码,老大不买账
查看>>
xml解析
查看>>
ubuntu-串口编程
查看>>
cvs上传复制项目
查看>>
C语言数字与字符串转换 atoi()函数、itoa()函数、sprintf()函数
查看>>
存储过程之六—触发器
查看>>
dataGridView 控制行是否全选
查看>>
C# 依赖缓存
查看>>
shell基础入门(一)
查看>>