Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

重构Data模块 #9

Closed
12 of 13 tasks
miswanting opened this issue Apr 29, 2020 · 1 comment
Closed
12 of 13 tasks

重构Data模块 #9

miswanting opened this issue Apr 29, 2020 · 1 comment
Assignees

Comments

@miswanting
Copy link
Owner

miswanting commented Apr 29, 2020

重构Data模块

重构目标

  • 在留有兼容性措施的前提下,将API.data替换为API.dat()
  • 同上:API.data['db']API.sav()
  • 同上:API.data['config']API.cfg()

性质

v0.2的关键变更之一

变更原因分析

引擎在初始化时,就会将data/中的所有数据文件加载到内存(API.data)中,这样很方便,但有如下劣势:

  1. 所有数据均在初始化时加载(初始化耗时较长)
  2. 所有数据均保存在内存中(内存占用较多)

劣势出现的根本原因来自于数据调用的机制,由于游戏开发时是调用的字典,而引擎无法得知开发者调用的动作,所以只能在一开始将所有数据加载到内存中,让开发者能够调用任何数据。

为了解决这个问题,现使用函数代替字典,将调用动作明确传入引擎,引擎就可以根据这一动作进行数据调用操作。这样改变的优势如下:

  1. 可以实现延迟加载(lazy_load),使用数据时才加载,可以无限缩小数据的内存调用,适用于空间需求>时间需求。
  2. 可以兼容全局一次性加载,适用于时间需求>空间需求的场景上。
  3. 数据加载方案更加灵活,为深度优化提供了可行性。

涉及到的工作

现分析原API.data所起到的作用:

  1. 获取配置数据:API.data['config.system']['main']获取的是config/system.cfg文件中的main的值;
  2. 获取静态文件数据:API.data['data.test']['tmp']获取的是data/test.cfg文件中的tmp的值;
  3. 获取存档数据:当存档加载后,API.data['db']['tmp']获取的是存档数据中的tmp的值;
  4. 临时数据:除了API.data['config.*']API.data['data.*']API.data['db']三个域之外,还可以使用其他自定义域来存放数据,甚至是二进制、Runtime数据,如API.data['tm']=TimeManager()

现将原功能拆解为4个函数:

  1. API.data['config.*']API.cfg('*')
  2. API.data['data.*']API.dat('*')
  3. API.data['db']API.sav()
  4. API.data['*']API.tmp('*')

兼容性

向后兼容

工作量化

  • 调用系:cfg,dat,sav;
  • IO系:read,write;
  • 数据管理系:mount,unmount;
  • 存档管理系:save,;
  • 点路径转换系:dot2path,path2dot;
  • 流程系:check_file_system,scan_configs,load_configs,scan_data_files,load_data_files,scan_saves,load_saves;
  • 工具系:assemble_path,;
  • 导入导出系:import_from,export_to;
  • 格式转换系:file_convert;
  • 兼容系:data;
@miswanting
Copy link
Owner Author

计划合并至#20

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant