写了一个超长的热更新文档,欢迎反馈

文档地址在此

https://github.com/pandamicro/creator-docs/blob/v1.4/source/zh/advanced-topics/assets-manager.md

已经提交到主仓库,如果大家看了还有什么不理解的问题,欢迎留言,我会看如何整合到文档中

42赞

-x的3.15还没发布。。。文档就出来了。。

1赞

快发布了

人工置顶

怎么样才能做成游戏大厅,可以单独选择的下游戏:slightly_smiling:

3赞

mark下来慢慢看

必须顶起来,现在的进度还没到搞热更新的阶段,但还是认真的看了一遍,感谢

二话不说,先顶一发。

二话不说,给力

版本对比函数当中的assetsManager.setVersionCompareHandle(function (versionA, versionB))这里面的versionA和versionB哪个是本地版本?哪个是远程版本?如果不写这个函数的话,版本的对比是由底层对比判断版本吗?还有如果本地版本号高于远程版本号的时候,资源的MD5也存在差异,这个时候,读取的资源是以远程版本还是本地版本的?望解惑,谢谢。

目前没有 asset bundle,所以需要一个游戏对应一个项目,对应一个 manifest。最后在外面包一个大厅项目,大厅项目,需要参考 main.js 的代码去启动不同的游戏(加载不同的 settings.js,然后运行不同游戏的场景)

哪个是远程和本地并不重要,你只要保障你返回的比较结果是正确的就可以了。
如果不写由引擎默认的版本对比函数来对比,支持 x.x.x.x 这种形式的版本号

如果本地主版本高于远程主版本,根本不会去启动更新流程,所以不会用到任何远程资源

2赞

谢谢panda的解答,下午发现个问题,新的热更新demo当中有有个hot-update的更新插件

messages: {
‘editor:build-finished’: function (event, target) {

}
}
这个是在构建完成后在main.js文件当中自动加入
if (cc.sys.isNative) {
var hotUpdateSearchPaths = cc.sys.localStorage.getItem(‘HotUpdateSearchPaths’);
if (hotUpdateSearchPaths) {
jsb.fileUtils.setSearchPaths(JSON.parse(hotUpdateSearchPaths));
}
}
这热更新检测的代码吧,我构建了web版本,当中的mian.js也加入了上面的代码,运行index.html的时候报错
Uncaught ReferenceError: cc is not defined
删掉就没事了,不过每次构建都得删除一次,有办法判断我构建的是什么环境的包吗?要不这样每次构建web版都得手动删除,这跟以前没区别啊,以前是手动添加,现在是手动删,不过好处就是发原生端的时候不会因为忘记,而导致热更新无效,web版的好补救嘛,当然插件能更方便是最好的,看看我的建议能不能实现。

改一下插件内容,把附加的内容改成

if (cc && cc.sys.isNative)

应该就可以了

我试了下,并不能这样去判断,cc.sys.isNative log出来,构建web和Android都是false,我是在messages里面判断的。

你说的是 editor message ?这跟热更新有什么关系我实在不理解

3.14.1 AssetmanagerEx 在安卓真机上有个bug,会延迟10秒左右 发出网络请求,能解决吗?

辛苦 @panda 大神!!
期待 1.5 版本的熱更新 :blush:

https://github.com/cocos-creator/tutorial-hot-update
github上的范例里面packages文件夹不是有个hot-update的插件吗?这个插件在构建结束的时候,会自动给构建目录的main.js文件头自动添加判断更新的代码,但是如果是构建了web版本,执行index.html后会报错“Uncaught ReferenceError: cc is not defined”,虽然这个跟热更新确实没什么问题,但是也是一个问题啊,我这不就寻求panda大神解决嘛。我找1.4之前版本的构建web版出来,main.js加入
if (cc.sys.isNative) {
var hotUpdateSearchPaths = cc.sys.localStorage.getItem(‘HotUpdateSearchPaths’);
if (hotUpdateSearchPaths) {
jsb.fileUtils.setSearchPaths(JSON.parse(hotUpdateSearchPaths));
}
}
这个没有报“ cc is not defined”,现在的1.4.2版本报错,这个应该是bug吧?

我不是让你放在插件的 message 里面判断,而是把插件中 main.js 里面附加的代码改为

if (cc && cc.sys.isNative) { 
    var hotUpdateSearchPaths = cc.sys.localStorage.getItem('HotUpdateSearchPaths'); 
    if (hotUpdateSearchPaths) { 
         jsb.fileUtils.setSearchPaths(JSON.parse(hotUpdateSearchPaths)); 
    }
}

Panda 大大,asset bundle大概几月会出啊?

1赞