H5游戏优化技巧

H5游戏的优化之路

优化一

我优化游戏大概有以下几个方面:
1.减少资源内存占用
2.减少计算
3.降低draw call
4.使用对象池
5.动态调整游戏帧率
一.内存中的资源占用:
1.使用适当的设计分辨率不要将设计分辨率定的太大 1136 x 640 足矣
2.不使用的资源及时释放

二.减少计算量
这个只能根据游戏来处理了,减少一些不必要的运算,使用更好的算法,一般的小游戏计算量其实都还好

三.降低draw call
1.将小图合成大图使用打图集的工具
2.Label使用BMFont
3.减少Mask使用
4.不要使用jpg图片
5.减少粒子使用
有些人可能会说明明这些都做了为什么Draw Call还那么高?

1.不同图集之间渲染被打断
合并draw call就是同一张图片渲染中间不能出现不同的纹理,如果一个场景中只有一张大图,场景中只有Sprite,那么draw call 肯定为1 (如果是使用自动图集的必须要发布出来才能生效),如果场景中有两张大图,只有相同大图的node一起渲染,才不会打断draw call , 当图集A的所有Sprite 都在node 1 ,图集B的所有Sprite都在 node2就会只有两个 draw call,或者图集A的所有 Sprite 都在图集B所有 Sprite 的之前渲染也会只有两个draw call 。如果不同大图之间的Sprite对象交叉在一起渲染draw call就会变高。

2.相同层级中间穿插Label
如果多个Label使用的相同BMFont 字体并且在同一个node ,label与label之间没有其他的node,label的draw call也会合并,如果sprite之后有一个label,label之后又有一个sprite,这样两个sprite就不能合并draw call,label尽可能在sprite之后渲染或者放到单独的Node上。

3.使用Mask组件会打断draw call

四.使用对象池减少游戏过程中动态创建对象
游戏中多次出现的东西有加入对象池,比如一些游戏中出现的效果,游戏中的道具,游戏中浮现的加减分数,有必要就不用label,自己封装个对象,将0-9出成图片,打入大图中。

五.动态修改游戏帧率
我以前从来没有修改过游戏帧率,怕影响游戏效果,但是打出APP包,在一些手机上发热特别严重,玩一小会就感觉可以当暖手宝用,现在做的是一个休闲的小游戏,感觉对帧率要求不是很高,就把游戏中不显示动画的时候帧率设为45帧,有动画的时候把帧率设为60帧,使用的接口就是cc.game.setFrameRate();

六.动态移除游戏中的部分效果
我在游戏过程中启动了一个update,将游戏卡顿划分等级,我这边是,当连续6帧内,帧率低于50帧为一级卡顿,连续低于45帧为二级卡顿,我这个游戏背景上有很多的特效,将可以移除的特效放到数组中,检测到当前是几级卡顿就停掉对象的效果,还有就是如果有些效果可以用图片代替也可以在较为卡顿的时候给替换为图片,如果有些重动态修改了帧率,不要忘了将设置的卡顿帧率乘以缩小的系数。

优化二

1、引擎首加。
目前已经处理,引擎模块裁剪后是900KB+, 但settings文件有300KB. 还有一些其它加载。

2、场景/prefab等节点解析慢
根据官方解释,场景或者prefab的解析相对较慢。 建议把重复的节点删除,改为代码创建。
试过了,这个确实有效,但Cocos Creator的可视化编辑基本上就没卵用了。
另外,有一些复杂的界面,即使不重复的节点也很多的。 有点心累。

3、动画加载慢
这算是最大的一个效率优化点。 简单的动画要经过动画文件加载解析,动画相关资源加载,组装动画。。 最后才得已显示。 我们之前的动画是挂接到节点的Animation上的。 导致进场景很卡。
现在改为了第一次播放时加载。 进游戏房间快了很多。
但很明显这个动画组件的提升空间非常大。
4、合理规划图片资源结构,自动Atlas
加载时间过长最大的一个开销就是发起了太多的HTTP加载请求。 使用Atlas可以大大减少这个开销。 但为了避免前期不必要的加载。 最好做资源分类。 比如, 大厅的资源就放到一个Atlas中。 游戏的资源就放到另一批Atlas中。
4、资源压缩
我们使用了pngquat命令行,把web-mobile/res整体压缩了。 可以使加载量减少50%左右

以上就是我们做的优化。
目前看来,要想做到很好的加载体验。必须将场景分拆。 并且prefab的加载效率决定了我们不能大批量的使用

优化三:

1.资源分步加载
游戏和web界面不同,是有很多动画,图片资源,这部分的体积占了游戏的90%,如何处理好游戏资源的加载,这对游戏的加载速度体验很关键。
针对游戏的分为各个部分,模块,资源也可以相应的划分为各个组,egret在资源这块处理的很好,提供了RES这个模块进行资源的处理,资源分组。相应的,在游戏中,进行分步加载也变得更加简单。比如,我把游戏资源分为三个组,游戏主场景,比赛场景,以及一些二级弹窗资源,这样划分之后,就可以对资源进行分步加载。一开始进入游戏,只加载主场景资源,提高游戏启动速度,加快进入游戏时间,避免在加载界面停留过长而流失用户。进入游戏之后再进行加载比赛场景和一些二级弹窗。当然,这样做的话,也会有一些弊端,在二级弹窗和比赛资源还没加载完成时,这时进入比赛或者点弹窗,就需要一些处理,等待资源加载完成后再进入,可以采用promis异步,或者添加事件监听。这样会造成一定的体验不好,需要取舍。如果资源整体不大,就无需分步加载。
2.对象池
对一些复用的组件,建立对象池,这是一个很常见的做法,也是最需要做的事情。虽然现在浏览器的性能有了很大提升,但是,对于一低端机型,对象池还是很有必要。建立对象池,对一些重复使用的组件进行回收利用,而不是直接销毁,这对页面性能提升很大。这是因为js的垃圾回收不是及时的,如果在一些密集渲染的情况下,就会出现卡顿,设备发烫的现象出现,影响用户体验。
比如,我之前做的一个战舰战斗的场景,10艘战舰进行随机发射炮弹,鱼雷和火箭筒,还伴随着爆炸效果动画,轰炸的声音。这么多的图片动画渲染,对设备性能要求是很高的,在一些低端机上,会出现卡顿,发热现象。我统计过,webgl的drawcall达到了300+,这是一个很恐怖的数字,内存的占用也达到了一个恐怖的数字。总之,这是一个糟糕的用户体验。后来,我做了一些处理,写一个对象池,对炮弹进行复用,提升很大,卡顿,发热现象没有了,画面也流畅了,内存占用也大大减少。
3.屏幕适配
针对不同的机型,进行适配一直是件很头疼的事情。市面的手机太多了,各种不同尺寸的屏幕,还有一些刘海屏,全面屏,适配是很麻烦的事情。屏幕适配这块,egret提供一些见简单的适配方案,比如拉伸占满屏幕,按宽度适配,高度适配,缩放保持原宽高比。这些方案都有些不足,会出现图片拉伸变形,黑边等等问题。所以,手机端的适配最好的方法是背景拉伸占满屏幕,而里面的组件就按照相对位置进行摆放。所以,在设置各个组件位置的时候,就必须写相对坐标,而不是绝对坐标,在一开始就解决屏幕适配问题。
pc端的话,就更加麻烦,所以,我的处理是之间缩放占满屏幕。
4.其他一些小坑
图片资源一定要压缩,能压缩很多。之前美术提供的图片没压缩,一张图片就达到了2M多,几张图片就十几M,这加载速度肯定很慢。压缩之后,只有几十k,速度一下子就上去了。
对于图片进行合并,这是常规做法,但是需要注意的点是注意合图尺寸,手机端不要超过2048。目前发现在苹果6s和小米黑鲨手机上会出现图片加载黑块的问题。帧动画的合图也是。
还有就是,写界面时,划分一定要清晰,哪怕多写几个类也要分清楚,这对后期需求变更修改起来方便很多。都知道,需求变更这种事情是很常见的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,080评论 4 62
  • 小司是一个帅气的男孩 同时,他心思细腻,他总对梅梅说一些贴心的话 你今天看起来好累,要好好休息,照顾好自己啊 你好...
    贾玖文阅读 294评论 0 1
  • 今天很惊讶,和他说参加梦想盛典活动,他还说要跟我去。以前他都很反对我参加活动。结束后,也很关心我有没有吃晚饭。激动...
    aseeya阅读 112评论 1 1
  • 今天的内容来自《第5章 心灵的转变》 阅读拆页前,先阅读下面内容,帮助理解“系统思考”的基本概念和修炼的实质。 系...
    心琳时刻阅读 295评论 0 0