全面讲授CocosCreator热更新(2)

按照当前包内的manifest的remoteVersionUrl字段,去下载其当前的版本描写文件,然后按照与当地的版本比拟,若需要更新则更新到对应最新版本,否则就不需要更新,继承后续流程。

这里需要对其几个要害点,再细化分解一下:

_localManifest:当前包内的manifest

首先,”游戏包目次“内应该有一个默认的manifest文件,描写当前游戏版本("version"字段),这个manifest一般随游戏包卸载、安装来更新。然后在”热更目次“也会有一个manifest文件,描写当前热更目次下的版本信息。我们每次启动游戏的时候都应该判定一下,当前情况下,到底是”游戏包目次“,照旧”热更目次“才是最新的版本,来调解其对应在searchPaths的优先级,较新的manifest也就称为当前包内的manifest,代码顶用_localManifest来记录。
留意,上述cocos基本热更流程中,并没有这一步,是因为其暗示流程是包第一次安装的环境,热更目次下是没有manifest文件,所以_localManifest就是”游戏包目次“,完整的热更流程是需要做这一步判定的。
上诉逻辑对应的代码,请参阅:AssetsManagerEx的init、loadLocalManifest等函数。

先请求远端版本manifest

在manifest的”remoteVersionUrl“字段中,其对应的是远端处事器的版本文件,下面给到官方demo的一个version.manifest,便于各人领略

{ "packageUrl":"http://192.168.50.220:5555/tutorial-hot-update/remote-assets/", "remoteManifestUrl":"http://192.168.50.220:5555/tutorial-hot-update/remote-assets/project.manifest", "remoteVersionUrl":"http://192.168.50.220:5555/tutorial-hot-update/remote-assets/version.manifest", "version":"2.0" }

从上面可以看到,version.manifest有一个“version”字段,这也是我们快速举办版本比拟的依据。下载version.manifest,然后再与当地_localManifest的版本比拟,来检测当前包是否需要更新,这个进程代码上一般定名为checkUpdate。

姑且文件夹的须要性

在热更进程中,因为我们是多个资源依次下载的,这期间很大概呈现各类问题,所有,我们需要一个姑且文件夹来暂存我们的下载,比及全部文件下载竣事后,还需要检测文件是否完整,才气去替换“热更目次”下的旧资源,不要直接在“热更目次”上下载,一旦呈现问题,本身也搞不清那部门是新的,那部门是照旧旧的。这种思路在措施设计中也可以警惕体会,我们认真的一些数据、字段的维护,只管能做到整体的替换更新,而不是处处随意的去修改、赋值。

热更是热更差别化文件,是怎么做到这点的

在manifest文件中,"assets"字段下,记录每个资源的key和md5信息,只需要远端的_remoteManifest下记录的资源举办比拟,新的key则是新增资源,没有的key则是需要删除的资源,md5差异的就是需要更新的文件。
对应的代码,请参阅:Manifest的genDiff等函数。

热更好之后,怎么让其生效

当我们热更好了新的资源后,怎么在不需要调解代码的环境下,让其生效?哈哈,方才上文已经先容过了,我们调解我们的searchPaths,让“热更目次”优先级高于“游戏包目次”即可。
上面的流程图中,cocos推荐的是用cc.sys.localStorage把_localManifest对应的路径存储起来,并在后续app启动的开始阶段,就从cc.sys.localStorage读取对应路径,配置到searchPaths中。
上诉方案当然可行,可是就一个完善的客户端框架而言,尤其是针对多子项目标大厅类游戏,小我私家认为这种动态存储路径、配置路径并不是较量符合的方案。在架构设计上,我们需要先确定好整个客户端的“热更目次”,并确定好优先级,即整个项目标searchPaths都是凭据我们设定的逻辑牢靠好,而不是动态的去调解,这样的长处是,在独一的处所确定好searchPaths逻辑,之后仅需要按照逻辑,增删对应路径下的资源即可,这样应该是更利于扩展和维护的。但同样需要留意,这种牢靠好searchPaths的方案,在app安装替换的时候,要维护好新的“游戏包目次”的版本与之前“热更目次”下的版本比拟环境,如,app当地安装进级后的版本比之前“热更目次”的版本更高,可以思量把之前“热更目次”下的资源都清空掉,别的一种更贫苦的逻辑是,app安装进级后的版本照旧比“热更目次”版本低,这是要留意,“热更目次”存储的是相对付进级前“游戏包目次”的差别化文件,进级后“游戏包目次”下的文件产生变革,那“热更目次”下的差别化文件就不必然能兼容当前的“游戏包目次”,这种环境也可以把“热更目次”环境,让其从头去比拟、热更差别化文件。

旧的版本资源怎么处理惩罚

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsjfsy.html