告别微信小游戏启动场景黑屏,分享一个内置资源打包插件

自己在用的一个插件,整理了一下分享出来,需要的拿去:relieved:

GitHub地址

Cocos Creator 微信小游戏内置资源打包插件

插件功能:使用Cocos Creator构建微信小游戏项目时,会自动打包指定必要的内置资源到首包。有效解决启动场景因网络延迟或加载失败而导致的黑屏/卡死问题。

解决的具体问题:

  1. Cocos Creator初始化引擎时,会先加载内置资源文件夹effects和materials下的资源,因为基础组件cc.Sprite需要对应的material才能显示,如果出现加载失败的情况会导致黑屏卡死。
  2. 在玩家首次启动游戏时,加载启动场景/首屏会从远程加载资源,资源在下载过程会出现短暂的黑屏。
  3. 其他资源加载问题,比如Cocos Creator 2.2.0华为快游戏播放音频时会出现卡顿,把对应的音频文件夹打包到包里可以解决这个问题。

使用方法:

  1. 所有项目生效:把插件文件夹拷贝到 用户名/.CocosCreator/packages下;指定项目生效:把插件文件夹拷贝到 项目根目录/packages下。重启Cocos Creator
  2. 构建微信小游戏项目,勾选MD5 cache,不勾选调试模式(正式打包才启用该插件功能)
  3. 构建完成后,会多出一个res_internal文件夹,这个文件夹就是内置的资源。把原本res文件夹资源上传到服务器后,移除或者删除res文件夹,最后把res_internal重命名为res。

修改插件代码打包其他资源

打包文件夹 queryAssets(‘db://assets/resources/sounds/**/*’);
打包具体文件 queryAssets(‘db://assets/RewardView.prefab’);

6赞

简单说明一下,就是某些重要的远程资源放到包里面,避免因为网络较差加载失败而导致的种种问题

mark

mark

找到最开始的页面,保留在包体内,不行么·····

一开始我也是这样处理的,但网络断开的话还是会黑屏,自从有了material之后就要附加下面三个配置文件才能显示sprite了
“type”:“cc.Texture2D”,“data”:“0,9729,9729,33071, …
type”:“cc.EffectAsset”,”_name":“builtin-2d-sprite”
type”:“cc.Material”,"_name":“builtin-2d-sprite”

mark,刚好需要。

请问这个queryAssets是不是只能调用一次? 我使用这插件,打包出来, res目录下的import只要替换默认的,就会存在找不到资源问题。只能把res/raw-assets放进去才能使用,不过这么操作,还是没撒用,只是不报错。

一个目标资源或者文件夹资源只需调用queryAssets一次,不过多次调用也是没问题的,你是怎么调用的呢?

打包出来的res_internal变成默认的res文件夹是只包含启动场景的必要资源不包含远程的其他资源,你说的找不到资源看一下具体是什么资源,确保远程服务器上是有的

我只是把raw-assets传到远程, 最初的res/import还是本地。用你方法, res_internal里面的import替换原本的后,游戏就加载资源报错。 我也不知道为撒。

最初的res要原封不动的放在远程,不分import和raw-assets。放了之后直接删除这个res,重命名res_internal为res,不需要单独覆盖import或者raw-assets。实在不行的话,看方便留个QQ给我不,看一下是什么情况

如果同时使用了引擎分离插件就会报错,构建不了!

版本有要求吗? 我 v2.0.10 会报错

没有_md5Map 属性

2.1.4可用! 感谢楼主的脚本

是因为打包没勾选md5加密吧?

这个吗 ,有勾选

更新了下引擎 2.2 倒是可以

请问是什么版本的引擎呢?

看了一下2.0.10的Creator构建出来确实没有_md5Map这个属性,不好意思没做旧版本的兼容。旧版本的引擎如果没有带有material材质系统建议按这个官方教程去做 通过加载界面优化微信小游戏启动速度 ,直接读取本地资源,这样会少一些配置文件更节省空间。

如果引擎版本带有材质系统就可以用这个插件去打包

不太懂他的构建过程。 大概看了下 _md5Map 里面的数据 大概就是 { uuid: md5 …}, 如果知道 新版本的 _md5Map 数据生成的方法是不是就可以兼容? 顺便问下大佬,哪里能了解到引擎构建这部分的过程。是否有开源?