【讨论】小白优化场景切换和资源加载如何入手

最近在研究H5的优化,因为之前完全没接触过游戏这行,可以说是完全的小白了。

刚完成基本功能的时候,整个游戏构建发布,从加载loading画面到进入主界面、游戏画面 全程要经历20分钟。(我也是服了我自己了:sweat:

后来一点一点看论坛求助、看文档教学,现在终于优化到 整个过程经历要3分钟(这里别吐槽,因为UI还没优化,每个图集都几M,下载下来要好慢)

说说我做的优化吧,也希望有大佬能指正下不够完美的地方

1、每个界面单独的图都做成图集,减少不必要的下载量
做图集我用的是TexturePackerGUI
 2、主界面、游戏画面的UI原来都是一个个在creator界面创建,有大量的重复加载,所有速度也因此翻了几倍。
后来直接把节点都做成预制体,挂在场景的脚本中,要用到的时候就用cc.instantiate直接实例化创建。
重复的都用代码来创建或复制,这里又减少了大量的重复加载。
(其实我看到麒麟子、小叫花子涛大神们都是用动态加载的cc.loader ,但我还是没研究懂load完之后的内存方面问题,暂时不敢全部换成load)

3、在最开始的loading界面做一个进度条,开始加载切换到主场景的时候,就把全部纹理都下载了(当然,loading的画面也会因此变得要比较多的时间)但加载完,后面打开就变得流畅了。

    加载的方法我用的是
  cc.loader.loadResDir(URL,cc.SpriteFrame,function(completedCount,totalCount,item){
self.loadBar.getComponent(cc.ProgressBar).progress = completedCount/totalCount
            },function(){  
                cc.director.loadScene("main")
                cc.log("完成了")
            })

4、那些比较大的预制体 或者 弹出窗口类型的预制体都勾选上延迟加载,这样就不会抢占加载的时间了,在点击打开的时候才去单独加载进来,就显得流畅很多了。

暂时总结出来的就这么多,我知道还有一大堆坑我没解决,希望知道的大佬帮忙指出下:14::14:

2赞

我目前只有音效是在resources里用cc.loader加载后才播放,因为我刚完成的这个游戏特殊,基本都要显示,没啥需要动态加载的资源

还有我的UI界面,绝大部分是直接放在场景里的

那第一次加载界面的时候不会要加载很久吗?

所有东西都在第一时间加载了

很快啊,在load界面预加载新场景和请求接口,正好做个进度条,也就三四秒时间

大神有对纹理做什么优化吗?

应该把所有的纹理都做成了图集吧,图集多大?(因为我看到500K的图都要加载1-2秒)

另外预加载,我看到预加载的东西比较多的话,当前场景也会有卡顿的情况。甚至有一次,预加载跟点击弹出的窗口同时抢占速度,预加载没完成弹出窗口的背景图就一直没出来,直到预加载完成,弹出窗口才顺利显示出来(弹出窗口弄了延迟加载)

单个图集别太大,平均1024*1024吧,然后用tinypng压缩一下整体压缩一下,还有可能你的带宽比较下,下载速度就那么慢

好的

看来现在得先把图集那些先优化一遍看看了

可以留个qq,我加你

私信了:14:

问下,你说"那些比较大的预制体 或者 弹出窗口类型的预制体都勾选上延迟加载,这样就不会抢占加载的时间了".如果我没 有动态加载这些,就不能勾选这些,它本身就是点击打开就加载。如果我动态加载这些,勾选好像用处不是太大吧,我去试试吧

请问您有遇到过资源加载到一半突然没网的情况吗?然后过个一两秒又有网了,这样会不会出问题?您是怎么解决的?
我在做小游戏遇到这样的问题,然后资源就再也加载不出来了,再触发也不运行。