目前用的creator2.0.9 + TS,在微信小游戏上做的中重度网游,目前包体太大要分包,但是脚本里import的文件如果分出去,启动直接报错,因为游戏启动的时候还没有把分包下载下来。
把资源和部分代码分包出去,还是大吗?
是的,因为用的protobuf,.proto文件导出的js很大,有1.5M。现在的解决方案是修改main.js,加载完分包再执行cc.game.run()。
cc.loader.downloader.loadSubpackage(‘subpackage’, function (err) {
if (err) {
return console.error(err);
}
console.log(‘load subpackage successfully.’);
cc.game.run(option, onStart);
});
但是v2.0.9版本,打出微信小游戏预览,苹果手机微信会闪退,安卓没问题。用V2.1版本都没问题。(项目是从2.1升到的2.0.9)
可以给个demo看一下么?
这个不用demo,用v2.0.9新建个项目,建个文件夹设置为子包,然后打包微信小游戏,修改打包出来的main.js,将 cc.game.run(option, onStart); 这一行改为
cc.loader.downloader.loadSubpackage(‘subpackage’, function (err) {
if (err) {
return console.error(err);
}
console.log(‘load subpackage successfully.’);
cc.game.run(option, onStart);
});
用苹果手机扫码预览,微信会闪退。
这样就没有代码提示了,用TS很大的一个原因是为了良好的代码提示。
还是希望官方能有解决微信闪退的方案,经测试v2.1和v2.0.8都没问题,v2.0.9的苹果端微信会闪退。 不使用cc.loader.downloader.loadSubpackage,使用微信的api wx.loadSubpackage 也有相同的问题
.proto文件导出来的消息中,每个消息都有prototype.clear、prototype.has、prototype.set等方法,如果项目中没有用到,可以都删掉,我们项目把每个消息的clear和has方法全删除掉,大小缩减不少
其实现在ES中有个提案,说是可以动态异步import,等成为标准后这个语法也会进入TS的,其实感觉Creator可以用这个语法来从子包内加载对应的模块,如果子包还未加载过就可以转为调引擎api加载子包,这样不是用起来舒服得多
没有看到有这几个方法,有个verify()方法可以删掉,但是治标不治本,分包肯定还是要分的,用TS脚本分包就避免不了这个问题。 现在只有v2.0.9版本加载分包会闪退,所以感觉还是这个版本的问题,不然就只能先用2.0.8了。
这样话,在分包加载完前,是黑屏的吧
不是黑屏,会在微信小游戏的加载界面停留的久一点
这个分包加载iphone闪退问题依然存在啊 。。。