代码拉取完成,页面将自动刷新
由于游戏使用分包设计,所以传统编码方式访问其他包中的文件是比较麻烦的事,而且还涉及到各个分包加载与否,或者加载先后的问题。索引模块的设计就是为了解决分包文件访问问题,力求在编码时和传统编码一样,根本不用考虑分包的问题。
索引模块是为了解决包文件共享而设计的,但是它并不是文件管理器,或者资源管理器。索引模块仅仅只是一张表,表中的各个节点记录着各种数据,当我们要访问某一类资源时只要在索引模块中查找就可以了。
包文件共享
中共享
的是什么? 一般我们要共享的不是单个文件,而是一类配置,比如某个包中的特效需要共享,那么这些特效的配置就是索引表中的数据。
每个游戏包都可以在它的资源目录中定义索引加载表,以加载当前包的共享配置数据等。资源索引加载表路径为<游戏包>/res/<游戏包>/indexes.json
,这是一个JSON文件里面包含了所有加载表,如;
{
"src": "$(respath)/main/indexes/src.json",
"res": "$(respath)/main/indexes/res.json",
"db_auto": "$(respath)/main/indexes/db_auto.json",
"prot_auto": "$(respath)/main/indexes/prot_auto.json"
}
*_auto
以_auto结尾的键一般为游戏脚本工具生成的,不要去修改它。比如db_auto
表示脚本工具生成的数据库索引文件,prot_auto
表示脚本工具生成的协议索引文件。$(respath)
这个是索引模块的一个环境变量,目前可以使用的环境变量有:
respath
游戏的资源路径,一般为res
srcpath
游戏的程序路径,一般为src
curpath
表示当前文件的目录路径src.json
、res.json
、db_auto.json
和prot_auto.json
其实就是普通的JSON文件,当然也是可以使用环境变量的。索引模块会把加载表中的索引JSON合并为一个索引表,当然只要有包文件加载就会把包文件中的索引配置读取出来合并为一个表。
这样当我们需要加载一类游戏配置的时候只要知道索引表中的节点路径就可以了,当然索引表需要仔细设计,他是很重要的。
PS:包里面的资源索引加载表是在包加载器里面加载的,可以看游戏包结构设计。
readJson(jsonfile)
读取JSON文件,游戏中读取JSON最好都使用这个函数。因为游戏包在打包阶段JSON文件可能会有优化,比如直接转换为lua文件,或者luac字节码文件,这对JSON加载速度可能会提升 10 ~ 50
倍。writeJson(jdata,jsonfile)
写入JSON文件,这和普通的写入没有区别,但是注意,在配置JSON优化的时候,需要避开这些可能会写入的问题,否则可能会出问题。readJsonConfig(jsonfile)
读取JSON配置文件,它在读取了JSON后,还会转换JSON配置中的环境变量。目前这类文件不能使用JSON优化,主要是出于转换环境变量的效率考虑。目前还不知道优劣。getIndex(path)
获得指定路径的索引配置。addListener(listener, ipaths, priority)
这个可以监听索引模块索引变化情况,对于依赖于索引模块的其他模块,监听是很重要的。比如包文件加载和释放都会存在索引表变动,需要及时更新其他对应模块。索引模块应该算是当前游戏框架中最重要的模块,如果没有这个模块,其他很多模块都会变得很难使用。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。