cocos2dx-js cocos creator 实现热更新

cocos2dx-js cocos creator 实现热更新

本项目使用的cocos creator 的版本是:3.8.8
官方给了一个热更新的demo项目:https://docs.cocos.com/creator/4.0/manual/zh/advanced-topics/hot-update-manager.html
上面详细介绍了热更新的原理,这里不再赘述。
本次使用的项目demo: https://gitee.com/wgslucky/cocos-tutorial-hot-update
这里以发布为window程序为例!
注意,在cocos creator中不能热更新,需要打包发布为原生程序才可以,比如window,安卓,ios等平台。

先准备一个web服务器,可以下载不同版本的游戏资源,这里我使用nginx做静态文件代理,可以当成web服务使用。安装好nginx之后,配置一下代理目录:

location /cocos-hot/{alias/home/nginx/project/cocos-hot-update/;}

新版本的游戏资源将放在/home/nginx/project/cocos-hot-update目录下面。
这样可以通过:http://ip:端口/cocos-hot/xxx/project.manifest 文件,其它资源也是一样的。

一, 构建版本为1.0.0的项目

我把版本号拼接在了游戏名称之后,这样在version_generator插件中就可以取到版本号了。其实cocos creator应该加个填写版本号地方,方便扩展脚本中获取。

构建完成之后,会调用version_generator.js插件,生成版本信息文件: project.manifest和version.manifest

插件目录:

生成的project.manifest文件内容是:

nodeversion_generator.js-v1.0.0-uhttps://www.xinyues.cn/cocos-hot/remote-assets/-sG:\work\开源项目\cocos-tutorial-hot-update\build\windows-001\data-dG:\work\开源项目\cocos-tutorial-hot-update\assets

-v 指定 Manifest 文件的主版本号。
-u 指定服务器远程包的地址,这个地址需要和最初发布版本中 Manifest 文件的远程包地址一致,否则无法检测到更新,。
-s 本地原生打包版本的目录相对路径, 比如 ./build/android/assets。
-d 保存 Manifest 文件的相对路径。

第一次构建的时候,项目可能会使用的是旧project.manifest文件,为了保持最近版本迭代,可以再构建一次。

为了区分更新前,和更新之后的不同,我加了一个新场景NewGameMain,里面只有一个按钮:

二,发布生成版本1.0.0项目的window调试程序
依次点击版本1.0.0的生成-> 运行:


点进入场景:

二, 修改NewGameMain场景的文字,并重新构建:

新的版本设置为1.0.1 :

三,把新版本构建好的资源上传到服务器

资源包括: project.manifest, version.manifest,以及构建输出目录data下面的assets和src文件内的所有文件。

把assets和scr打包成压缩包,上传到服务器并解压。

这里面的资源可以先在浏览器上面试一下,看看能不能访问到。
注意权限问题,如果文件是只读权限的话,下载不到,修改权限:
chmod 777 文件名

四,检测更新
启动旧版本的程序,点击检查更新:

发现新版本,可以去更新了,点击立刻更新,进度条会变化,然后程序会自动重启,重启之后,再点进入新场景,就可以看到更新后的内容了