问题
默认情况下热更新一定会使用远程文件写的url, 即便本地修改了url, 读取了远程之后也会立刻使用远程文件中的url开始后续的下载. 在一些特殊情况, 使用本地的url可能会更好.
解决方案
1.修改源码, 论坛里面有提到过 热更新动态域名惊喜发现
pro:
简单快捷,一步到位
con:
更新的时候回得重新改一次
2.拦截xxx_temp中的文件,在引擎下载文件后, 还没有开始解析之前修改这个文件.
cocos会先下载资源文件到xxx_temp目录然后再拷贝,其中xxx就是程序指定的名字,cocos会自己新建一个同级目录xxx_temp
pro:
不用改源码,
con:
实现方法很hacky
3.使用引擎提供的loadRemoteManifest方法动态修改
pro:
引擎自带方法,稳定
con:
实现麻烦
我选了第3个
关于第3个做法具体做法如下:
1.自己用xmlhttprequest下载version.manifest,存放到本地
2.自己比对版本号,决定是否下载project.manifest
3.下载project.manifest并修改其中的url,存放到本地
4.使用loadRemoteManifest读取内存中的manifest,
5.开始checkUpdate()
注意
一定要最后开始checkUpdate(),因为cocos源码里面检查到了如果状态不是unchecked会拒绝执行loadRemoteManifest