1.5.2 热更新 大厅+ 子游戏 不用重启DEMO

热更新大厅 子游戏 1.5.rar (4.9 KB)

https://fir.im/adch 测试APK

使用1.5.2

实现功能
大厅+子游戏 每个都需要 独立新建项目
实现动态 热更新每个子游戏
大家看逻辑

子游戏返回大厅js dating.rar (1.4 KB)

dating.js cc.INGAME = “”; 请设置等于空 搜索原始路径 读取大厅数据 加判断判断大厅是否更新 加上大厅热更新路径判断

33赞

厉害了我的

1赞

哪里下的01.52版本

表示看不懂

1赞

// 这是为了解决一个重启的 bug 而添加的
cc.director.startAnimation();
require(this._storagePath+"/src/main.js");
这样就可以不用重启了么?

使用配套的 main.js 对应的修改 wuxinghonghui 等信息

更新逻辑不依赖要更新的文件就行

这个是什么意思呢

1赞

厉害了我的

如果没有更新js,只是通过热更新方式下载了图片/音频等资源,project.js和settings.js没有更新的话,是不是下载完资源,直接调用cc.director.startAnimation()就可以不用重启了呢?

理论上是的 ,
目前这个是 根据 热更新 更改的 支持 一个文件没有 全部 热更新 判断
需要注意 路径 启动路径 和 main.js 的 路径配置 变量配置
否者 出现重复 class 这些

自己实践一下就知道了

官方文档:http://www.cocos.com/docs/creator/advanced-topics/assets-manager.html
重启的必要性

在论坛中经常会有开发者提问,能不能够不重启就直接启用热更新下来的资源?答案是,对。

有两个原因,第一是更新下来的脚本需要干净的 JS 环境才能正常运行。第二是场景配置,AssetsLibrary 中的配置都需要更新到最新才能够正常加载场景和资源。

JS 脚本的刷新

在热更新完成后,游戏中的所有脚本实际上已经执行过,所有的类、组件、对象都已经存在 JS context 中了,此时如果不重启直接加载脚本,同名的类和对象的确会被覆盖,但是已经用旧的类创建的对象是一直存在的,而被直接覆盖的全局对象在运行过程中修改的状态也全部丢失了。试想一下旧版本的对象和新版本的对象在一起打架的场景,一定很壮观。我还没有提对内存造成的额外开销呢。

资源配置的刷新

在 Cocos2d-x/JS 中,的确可以做到不重启直接启用新的贴图、字体、音效等资源,但是这点在 Cocos Creator 中并不成立,原因在于 Cocos Creator 的资源也依赖于配置,场景依赖于 settings.js 中的场景列表,而 raw assets 依赖于 settings.js 中的 raw assets 列表。如果 settings.js 没有重新执行,并被 main.js 和 AssetsLibrary 重新读取,那么游戏中是加载不到新的场景和资源的。

上面是热更新后必须要重启的原因,不过如何启用新的资源呢?那就需要依赖 Cocos 引擎的搜索路径机制了,Cocos 中所有文件的读取都是通过 FileUtils 来读取的,而 FileUtils 会按照搜索路径的优先级顺序查找文件。那么解决方案就很简单了,只要我们将热更新的缓存目录添加到搜索路径中,并且前置,那么就会优先搜索到缓存目录中的资源。

4赞

main.js 重载seeting.js 等下 发布一个 测试APK 大家 看看

只要是 一个项目 统统都可以 参考热更新 最新的demo 搜索路径

厉害了,楼主

我也小改了几行main.js就实现了。。。

1赞

你好,我也在用这个东西
我的_storagePath路径下并没有把main.js更新下来,所以require是不成功的,填写本地路径编译不了,请问要怎么实现。。。。

求一个教程

编译好了 把 main.js 拷贝 到 项目 src 里面

1.3.3的版本可以用这个么?