AssetsManager的bug:更新过程中断网,会出现文件不同步的问题
例如1.0.0到1.0.1,需要下载替换2个js
如果过程中,下载了一个js后断网了,这时候玩家将使用2个不同步的js进行游戏。一个是1.0.1版本的,一个是1.0.0的。
尝试解决: http://www.cnblogs.com/kenkofox/p/3906681.html
问题版本:3.0 rc0~rc2
========================================================
2014年8月15日补充
cocos2d-js 3.0 rc0 的AssetsManager有缺陷,有一些注意点:(可以阅读源代码发现)
1、旧manifest中有,但新manifest中没有的文件(Assets),会被删除;旧的没有,新的有,会正常下载。
2、groupversion暂时没什么意义,并无法达到这位博主所谓的增量更新:https://github.com/faint2death/cocos2d-js/blob/master/assetsmanager.md。暂时只在版本比较中用到,并没有在计算增量值中用到。
3、下载过程中N个文件其中某个遇到错误,已下载的文件还是会妥妥的覆盖了旧文件,这样会造成更新了一半的尴尬情况。
2014年8月19日补充
cocos2d-js 3.0 rc2 的AssetsManager依然有没有确保全部同步更新的bug。本来想彻底解决这个问题,但无奈时间有限,没有彻底理解AssetsManager多个类的作用。彻底解决的事,还是留给触控去解决吧。
经过小修改,已经可以确保同步更新资源。其实做的工作就是:等最终全部下载完成后再解压文件,这样的改动是最小的。
使用这个更新包: https://github.com/kenkozheng/cocos2d-js/tree/master/modified-AssetsManager
覆盖本地2个目录相应的文件:
【项目路径】\frameworks\js-bindings\cocos2d-x\extensions\assets-manager(新建工程时复制出来的)
【库路径】E:\cocos2d-js-v3.0-rc2\frameworks\js-bindings\cocos2d-x\extensions\assets-manager
使用方法:
1、所有js必须使用zip打包,但不强求只打包为1个文件。但不同zip不要有重复的js。
2、非js可以用zip,也可以直接列出。
由于确保所有资源都下载完成后才解压js,所以玩家即使N次更新失败,还是会妥妥的停留在上一版。
建议:
1、自第一次发布后,历次更新的代码都打包在一个js.zip中,每次只更新这个js.zip。这样好处是,保证所有代码是同步的,即使没更新到,玩家也就停留在上一版。例如第一次更新,有1.js,那么js.zip只有1.js;第二次更新2.js,那么js.zip就得包含1.js和2.js,这样避免一些跳版本更新的玩家出问题。
2、非代码资源,避免修改,可以直接用新文件,但不要替换旧文件,这样目的是避免多次版本更新造成新旧混乱。设想2次更新都是zip包,两个zip包都有1.png,这时候有个跳版本更新的玩家,就会下载2个zip包,但先后顺序是不可控的。
3、每次更新manifest文件必须保留以前的assets配置,不能删除。否则,如果删了以前的assets配置,客户端会跟随着删除相应的文件。