以前在开发应用的时候没有想过这么多,应为应用的数据很多都是现用现请求,并且软件版本更新外,很少需要再动内部资源。但是游戏就不一样,需要经常更新节日,图片,资源等等。所以很多时候进入游戏时都会加一个进度条,除了读取内部资源,还需要从网络下载资源。
就这个进度条的进度,以前一直不知道是怎么搞的,因为本地资源当然好说,因为知道工程的资源有多少,但是在下载这一步的进度条以前不明白怎么确定网络资源的多少,所以增加进度条的话一直不明白怎么控制这个进度。进度条以前总结过,进度条的重点还是要确定知道现在这部分占总部分的比重。
cocos2d-x进度条CCProgressTimer详解:http://dongge.org/blog/cocos2d/125.html
最后加入现在的项目组之后,终于搞明白了怎么回事。
主要分下面三个步骤:
确定需要下载的文件
这个以前不知道怎么确定,肯定不是直接遍历网络资源的大小,最后原来诀窍在于一个约定的json文件。在开始时,服务端会和策划,客户端约定一个json文件。比如checksum.json文件,这个文件会把所有需要的文件都写入在里面,需要的文件是什么这个不需要客户端管,这个文件是由策划制作,里面包含了所有项目要用的文件目录。比如有1.png,2.png两个文件,那么这个json文件会是这种类似格式
{ "1.png":"12345", "2.png":"23456" }
后面的是这个文件对应的md5码,这里只是举个例子,这里就是所有需要用到文件列表,所以需要做这个文件的策划也是挺苦逼的,那么多文件,只要需要以后更新的就都需要列一个。这个json文件本地有一份,服务器有一份。
下载更新过程
在开始游戏的时候,首先会对比本地程序中的checksum.json文件和服务器的checksum.json文件,因为每一份文件的md5不同,比如现在服务器的checksum.json文件是这样的。
{ "1.png":"12345", "2.png":"56789" }
那么就知道了1.png不变,2.png改变了,需要重新从网络下载,就这样,整个遍历这个json文件之后就知道了需要下载多少文件了,然后就可以开始下载,并且开始显示更新下载进度了。
提新包建议
知道了更新的原理,以后提最新版本的包时就应该注意在打包的时候直接用最新的checksum.json文件和最新的资源打包,这样在玩家下载到新包的时候就会直接不用更新开始游戏了。否则如果用的旧的资源和json文件,那玩家刚下载游戏后就需要更新最新的资源,也是浪费时间和资源,体验也不好。
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/216.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!