第一次搞热更新,这里记录一下全过程,方面以后查看。
原理:每次登陆游戏利用cocos的assetManager从服务器拉去当前最新的两个文件。 一个是version.mainifest,一个project.mainifest. 这两个文件都是xml的描述文件。一个包含了版本信息,第二个包含了游戏所有资源的MD5码。首先通过version文件对比本地的版本是否相同,如果不相同,再通过跟本地的project文件对比MD5码来判断哪些文件需要重新下载,替换资源。
步骤:
1.首先要进行测试先下载一个HFS服务器,这个服务器方便易学。每次将最新项目全部拖进服务器中,用GeneateManifest.py文件自动生成version 和 project文件。
2.编写Geneate文件。
这个文件是一个python。目的是生成对应的version和project文件。project文件可以帮你给每个资源生成独一无二的MD5码,相当于每个资源的标记。下面是一段python文件的代码,非常简单。
#!/usr/bin/env python
#coding:utf-8
import os
import json
import hashlib
import subprocess
assetsDir = {
"searchDir" : ["src", "res"],
"ignorDir" : ["cocos", "obj","version"]
}
versionConfigFile = "res/config/version_info.json" #版本信息的配置文件路径
versionManifestPath = "res/version/version.manifest" #由此脚本生成的version.manifest文件路径
projectManifestPath = "res/version/project.manifest" #由此脚本生成的project.manifest文件路径
class SearchFile:
def __init__(self):
self.fileList = []
for k in assetsDir:
if (k == "searchDir"):
for searchdire in assetsDir[k]:
self.recursiveDir(searchdire)
def recursiveDir(self, srcPath):
''' 递归指定目录下的所有文件'''
dirList = [] #所有文件夹
files = os.listdir(srcPath) #返回指定目录下的所有文件,及目录(不含子目录)
for f in files:
#目录的处理
if (os.path.isdir(srcPath + '/' + f)):
if (f[0] == '.' or (f in assetsDir["ignorDir"])):
#排除隐藏文件夹和忽略的目录
pass
else:
#添加非需要的文件夹
dirList.append(f)
#文件的处理
elif (os.path.isfile(srcPath + '/' + f)):
self.fileList.append(srcPath + '/' + f)