关于发热和耗电问题

关于creator制作的游戏,在真机上跑起来 发热和耗电现象较为严重。
挖坟挖了挺多帖子的, 除了降低drawcall 和 降低帧率之外 还有其它更好的办法么。
游戏战斗 使用的是龙骨, 唯一吃cpu的我感觉是战斗中 大量的网络请求吧

大家有没有 优化的经验之谈或者想法 欢迎大家来稿~

多线程很耗电

目测官方人员会选择性回避,不会回答你这个问题。

龙骨很耗电的,因为每帧都在计算,不过龙骨支持一种快速模式,会预计算,对于重复播放的动画有时显提升,但不知道CREATOR有没有支持的打算

1赞

Cocos官方不是也正在海外调优自己的项目吗? 请分享一些关于优化方面的经验吧,你们H5项目 关于发热和耗电是如何去优化的, 降低CPU 和 GPU 的负载,这上面如何去平衡。又要画面品质高 又要不耗电 不发热。 这太难为人了。

人工置顶~~~ 召唤 Cocos首席客服~~~~~~

帮你艾特 @wangzhe

目测你是对的

哈哈。。。大家好,小弟creator 做了几个项目,我来分享一下自己点一点经验吧,有错误的地方或者不足之处,欢迎大家指出。

首先题主说的发热问题,我来分享几个点吧。
1.最最最简单的方法,题主也说了,就是降帧率,30帧跟60帧,我们不说耗电量减少一半,也少不少了吧,这个我专门人肉测试过-。=,降温效果异常显著。但是题主也说了,30帧效果不好,这点也是显而易见的。所以我建议采取折中的办法,有些需要精细显示的地方使用60帧(比如战斗),有些地方使用30帧(比如ui界面)。玩家不太可能100%时间都在战斗,回到ui界面的时候,就给了手机喘息的时间,节约了性能减少耗电量,也不会让用户感觉手机过热,这个很容易实现,算是性价比最高的一个点了。

2.我想分享的点是,关注咱们游戏的内存,在mobile中,貌似没有独立显存这一说,说以我猜显存应该是在内存中的,这就导致了一个大家很容易忽略的问题,内存的过度增长,内存过高的情况下,有几个坏处,第一,被系统杀死并回收你的内存,你推到后台(比如在微信浏览器中,退出到桌面),再进去发现游戏没了,重新加载了这个是内存过高导致的系统垃圾回收,把你给释放掉了。第二,跟咱们游戏相关的,js的GC,当内存压力比较大的时候,浏览器的GC会频繁的调用,GC调用比较重,这会导致消耗更多的cpu去查找释放内存,雪上加霜,手机发热更严重,所以当手机一直发热,游戏变卡的时候,不妨查找下是不是内存过高了。而内存方面,两个点,第一内存,第二,显存
1)显存:creator默认是不会释放掉已加载的贴图资源的(1.6还不知道,1.5是不会自动释放的)这就导致一个问题,如果我们不把贴图从GPU内存中释放,那么,GPU内存肯定是一直涨的,这个的好处是,第二次加载不用重新加载贴图,性能更好,但是我认为坏处更加明显,还是内存(显存)过高,容易崩溃,发热,所以我们就需要自己去释放一些贴图来缓解内存压力,怎么释放呢?我们去扒一扒creator的文档,不得不夸一句,creator的文档,做的比之前cocos好多了哈哈,可见官方团队的用心,详请去这个地址,主要思路就是,找到不需要的图片的依赖,通过creator提供的API,删掉依赖,这样GPU显存就会降下来,可以用chrome的task manager 任务管理器,勾选打开GPU内存选项,看看你释放后,一小段时间内,这个值是否下降了,下降了就是释放成功啦~~~~。http://www.cocos.com/docs/creator/scripting/load-assets.html

2)内存:内存方面,就跟咱们的游戏息息相关了,你要搞个for  10000000 创建一堆大对象不释放,谁来优化都没辙。内存的优化,也是需要根据自己游戏的需求,定制自己的内存优化方案,主旨就是缓存、复用:常开界面选择性缓存,经常重复使用的东西,需要复用。
	1.缓存:游戏经常有好几个tab,或者用户除了在战斗,就会经常打开某些界面,这些界面可以选择一些进行缓存,避免多次创建,我的建议是大而常用的页面,或者使用频率非常高的页面,缓存起来,避免重复创建,这个优点非常明显,因为你会发现你创建一个对象,并没有办法完全的释放他(应该是浏览器GC的问题,某些垃圾并没有被回收,或者天知道什么时候GC把它带走=。=)这样界面越大,效果越明显,我们把握好一个内存的度,把一些界面缓存起来,这样可以减缓内存的增长,既减少创建贴图时候的GPU消耗,又减少了创建时候CPU的开销,一举两得,这个就是要把握一个内存的度,不要过度缓存(一样,在chrome的task manager可以看到内存信息,或者用xcode建立一个工程,里面就放一个uiwebview,然后加载游戏,通过xcode的debug navigator看内存变化,这个最接近真实ios环境)。
	2.复用:游戏中最容易复用的ui,可能是一个图标,可能是一个按钮,可能是任何东西,根据你的需求,做一个pool,去复用他,特别是创建的非常频繁的小东西,如游戏的tips提示等,这样的好处不仅仅是减少内存因频繁创建的开销导致垃圾越来越多,还有助于帧率的稳定,创建对象的cpu开销,会在一定程度上影响游戏的流畅性,所以这个也算是一举两得的事情。

3.减少drawcall,这个实际操作好处就不多说了,合理的分组图片,可以减少GPU的压力,creator已经支持自动批渲染啦,你同一张图片,他一次drawcall就画出来了。当然我认为最大的好处是 ===>你可以多找找美术妹纸聊聊天,商量怎么对图片进行分组呀,顺便聊聊人生。。。似不似。。似不似。。。

4.当然还有一个点,可以用来减少内存的使用,那就是减少分辨率啦,或者降低图片分辨率大小,一个图片提交到GPU创建贴图的大小,跟他的长宽息息相关。小的图片,就比较省内存啦。

当然,一款游戏经历开发到上线,还有好几个点也需要关注,不过和题主的问题没有太直接的关系,主要跟性能和游戏体验相关,比如,内存泄露,比如性能测试,比如网络优化,资源分组等等,如果有同学需要这些信息,我后面再发个帖子出来。跟大家分享一下。

今天就跟大家分享这些,谢谢。

7赞

总结得不错,都很到位,然而对楼主的问题并没什么卵用。

3赞

这个就见仁见智了,在一个有限性能的机器中,你只能做到取舍,做到一个最好的平衡,除了引擎本身的优化,我认为自己对游戏的优化才是最重要的,一个实现,不同人做出来的东西性能可能就差别很大,引擎只是工具,我认为,不管是native或者h5,做好游戏的资源管理和分配对游戏自身的优化效果远大于引擎所带来的优化对游戏的提升,通过各种工具,找出自己游戏性能的热点,抓大头解决,是一个比较合理的方案。

1赞

顶, 很好的分享, 谢谢.

感谢分享,都是干货。

真正的勇士,敢于直面惨淡的人生,敢于正视淋漓的鲜血~

第一个思路不错,值得借鉴

赞一个!!

其实棋牌游戏可以选30fps的,无奈我的项目中有移动的公共消息,如果设成30fps的,显示效果非常差,没办法还是使用了60fps