关于AssetsManager做热更新的一些疑惑

目前我使用了cocos2d-js 3.0 rc0,用最简单的例子程序,在android真机上测试。

我调试看到jsb.fileUtils.getWritablePath()的路径是:/data/data/org.cocos2dx.hellojavascript/files/

测试的代码参考自AssetsManagerTest.js,执行后,服务器端project.manifest里assets指定的文件都被下载到/data/data/org.cocos2dx.hellojavascript/files/下,包括project.manifest和version.manifest这两个文件,但是不知道下载到资源文件和js文件怎么才能替换游戏程序相关的文件,从而实现游戏的更新?

目前官方的文档貌似只有:
https://github.com/joshuastray/cocos-docs/blob/master/manual/framework/html5/v3/assets-manager/zh.md

麻烦开发的童鞋指点一下迷津。

官方文档在这里: http://cocos2d-x.org/docs/manual/framework/html5/v3/assets-manager/zh

替换现有资源是通过searchPath来实现的,Manifest文件中可以指定相对manifest文件的搜索路径,更新完成后,该搜索路径就会被前置添加到搜索路径列表中,并且它的优先级高于原始程序中设置的搜索路径。所以当你想要使用资源的时候,如果能在更新的资源中找到它就直接使用新资源。

举个例子:
比如你的原始程序有一个res/a.png,而manifest中也指定了一个res/a.png要更新,更新完成后,新版本的a.png可能保存于/data/data/org.cocos2dx.hellojavascript/files/res/a.png。而manifest的保存路径:/data/data/org.cocos2dx.hellojavascript/files/是会默认被添加到搜索路径中的,所以当你使用res/a.png去初始化一个sprite的时候,就会自动找到新版本的a.png

谢谢回复!cocos2d-x.org上的文档滞后的,3.0 rc0没有cc.AssetsManager了,而是jsb.AssetsManager。

早上看到这个帖子也稍微明白一点:
http://www.cocoachina.com/bbs/read.php?tid=183552

但还是有疑惑,主要在js文件的更新。执行完AssetsManager,用jsb.fileUtils.getSearchPaths();看,确实/data/data/org.cocos2dx.hellojavascript/files/被添加到搜索路径的第一位,jsb.fileUtils.fullPathForFilename(“src/app.js”);返回的结果也是/data/data/org.cocos2dx.hellojavascript/files/src/app.js,但貌似assets/src/app.js在一开始就加载了,这个怎么替换?

js文件都是在project.json定义,如果有新js文件增加,那么怎么启动加载/data/data/org.cocos2dx.hellojavascript/files/下的project.json和这目录下的js文件?

如果要热更新js,将这部分js不放在project.json中定义,等AssetsManager更新完了,用cc.loader.load动态加载就可以了

谢谢楼上!测试了一下,现在思路清晰了。

fysp在http://www.cocoachina.com/bbs/read.php?tid=206264这个帖子附件的project.manifest和version.manifest提到了官方文档没有说明的groupVersions字段,我试了一下,用来做增量更新蛮方便。

cocos2d-js的文档已经落后引擎开发很多,等我代码理清了,整理一篇文档。

有快捷生成project.manifest和version.manifest文件的方法吗?