516 lines
16 KiB
Markdown
516 lines
16 KiB
Markdown
# 配置管理
|
||
|
||
<cite>
|
||
**本文档引用的文件**
|
||
- [Main.ts](file://assets/script/Main.ts)
|
||
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts)
|
||
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts)
|
||
- [config.json](file://assets/resources/config.json)
|
||
- [GameUIConfig.ts](file://assets/script/game/common/config/GameUIConfig.ts)
|
||
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts)
|
||
- [LoadingViewComp.ts](file://assets/script/game/initialize/view/LoadingViewComp.ts)
|
||
</cite>
|
||
|
||
## 目录
|
||
1. [简介](#简介)
|
||
2. [项目结构](#项目结构)
|
||
3. [核心配置文件](#核心配置文件)
|
||
4. [配置系统架构](#配置系统架构)
|
||
5. [配置加载生命周期](#配置加载生命周期)
|
||
6. [配置管理模式](#配置管理模式)
|
||
7. [多语言配置体系](#多语言配置体系)
|
||
8. [配置热更新机制](#配置热更新机制)
|
||
9. [最佳实践指南](#最佳实践指南)
|
||
10. [故障排除](#故障排除)
|
||
11. [总结](#总结)
|
||
|
||
## 简介
|
||
|
||
本项目采用了一套完整的全局配置管理体系,以`config.json`为核心配置文件,配合Oops Framework提供的配置管理机制,实现了灵活、可扩展的配置解决方案。该系统支持版本控制、多语言国际化、加密存储、网络通信等关键功能,为游戏提供了稳定可靠的配置基础设施。
|
||
|
||
## 项目结构
|
||
|
||
配置管理系统的核心文件组织结构如下:
|
||
|
||
```mermaid
|
||
graph TB
|
||
subgraph "配置文件层"
|
||
ConfigJSON["config.json<br/>核心配置文件"]
|
||
LangJSON["language/*.json<br/>多语言资源"]
|
||
UIConfig["GameUIConfig.ts<br/>界面配置"]
|
||
end
|
||
subgraph "初始化层"
|
||
MainTS["Main.ts<br/>应用入口"]
|
||
InitTS["Initialize.ts<br/>初始化模块"]
|
||
SMCTS["SingletonModuleComp.ts<br/>单例组件"]
|
||
end
|
||
subgraph "框架层"
|
||
OopsFramework["Oops Framework<br/>配置管理框架"]
|
||
Storage["Storage Module<br/>本地存储"]
|
||
Language["Language Module<br/>多语言模块"]
|
||
end
|
||
ConfigJSON --> InitTS
|
||
InitTS --> SMCTS
|
||
SMCTS --> OopsFramework
|
||
OopsFramework --> Storage
|
||
OopsFramework --> Language
|
||
```
|
||
|
||
**图表来源**
|
||
- [config.json](file://assets/resources/config.json#L1-L21)
|
||
- [Main.ts](file://assets/script/Main.ts#L1-L41)
|
||
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L1-L207)
|
||
|
||
**章节来源**
|
||
- [config.json](file://assets/resources/config.json#L1-L21)
|
||
- [Main.ts](file://assets/script/Main.ts#L1-L41)
|
||
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L1-L207)
|
||
|
||
## 核心配置文件
|
||
|
||
### config.json 结构详解
|
||
|
||
`config.json`是整个配置系统的核心,包含了游戏运行所需的所有基础配置信息:
|
||
|
||
| 配置块 | 字段 | 类型 | 描述 | 默认值 |
|
||
|--------|------|------|------|--------|
|
||
| config | version | string | 游戏版本号,用于版本兼容性检查 | "1.0.0" |
|
||
| config | package | string | 应用包名,用于命名空间隔离 | "com.oops.game" |
|
||
| config | localDataKey | string | 本地数据加密密钥 | "oops" |
|
||
| config | localDataIv | string | 本地数据加密初始化向量 | "framework" |
|
||
| config | httpServer | string | HTTP服务器地址 | "http://192.168.0.150/main/" |
|
||
| config | httpTimeout | number | HTTP请求超时时间(毫秒) | 10000 |
|
||
| config | frameRate | number | 游戏帧率设置 | 60 |
|
||
| language | type | array | 支持的语言类型列表 | ["zh", "en"] |
|
||
| language | path | object | 语言资源路径映射 | json: "language/json", texture: "language/texture" |
|
||
|
||
### 配置字段技术意义
|
||
|
||
#### 版本控制与包名标识
|
||
- **version字段**:确保客户端与服务器端版本兼容性,防止因版本差异导致的功能异常
|
||
- **package字段**:提供命名空间隔离,避免与其他应用产生冲突
|
||
|
||
#### 加解密密钥配置
|
||
- **localDataKey**:本地数据加密密钥,保护用户隐私数据
|
||
- **localDataIv**:初始化向量,增强加密安全性
|
||
|
||
#### 服务器通信配置
|
||
- **httpServer**:统一的服务器地址,便于维护和迁移
|
||
- **httpTimeout**:合理的超时设置,平衡用户体验与系统稳定性
|
||
|
||
#### 帧率优化配置
|
||
- **frameRate**:固定帧率设置,确保游戏性能一致性
|
||
|
||
**章节来源**
|
||
- [config.json](file://assets/resources/config.json#L1-L21)
|
||
|
||
## 配置系统架构
|
||
|
||
### 整体架构设计
|
||
|
||
```mermaid
|
||
classDiagram
|
||
class Main {
|
||
+start() void
|
||
+run() Promise~void~
|
||
+initGui() void
|
||
+initEcsSystem() Promise~void~
|
||
}
|
||
class Initialize {
|
||
+LoadingView LoadingViewComp
|
||
+init() void
|
||
+loadCustom(queue) void
|
||
+loadLanguage(queue) void
|
||
+loadCommon(queue) void
|
||
+onComplete(queue) void
|
||
+loadGameDataUnified() Promise~void~
|
||
+loadFromCloud() Promise~void~
|
||
+loadFromLocalDebug() Promise~void~
|
||
+isWxClient() boolean
|
||
}
|
||
class SingletonModuleComp {
|
||
+initialize Initialize
|
||
+map GameMap
|
||
+openid string
|
||
+mission object
|
||
+guides array
|
||
+current_guide number
|
||
+data object
|
||
+fight_hero number
|
||
+heros array
|
||
+monsters array
|
||
+vmdata object
|
||
+updateCloudData() boolean
|
||
+getCloudData() void
|
||
+overrideLocalDataWithRemote(data) void
|
||
+addHero(hero_uuid) boolean
|
||
+updateFihgtHero(heroId) boolean
|
||
+updateGold(gold) boolean
|
||
}
|
||
class OopsFramework {
|
||
+config object
|
||
+language object
|
||
+storage object
|
||
+res object
|
||
+gui object
|
||
}
|
||
Main --> Initialize : "创建实例"
|
||
Initialize --> SingletonModuleComp : "注入依赖"
|
||
SingletonModuleComp --> OopsFramework : "使用框架"
|
||
Initialize --> OopsFramework : "调用服务"
|
||
```
|
||
|
||
**图表来源**
|
||
- [Main.ts](file://assets/script/Main.ts#L12-L41)
|
||
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L20-L207)
|
||
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L20-L195)
|
||
|
||
### 配置注入机制
|
||
|
||
配置系统通过以下机制实现全局访问:
|
||
|
||
1. **单例模式**:通过`ecs.getSingleton()`获取全局配置实例
|
||
2. **依赖注入**:Initialize模块负责配置的初始化和注入
|
||
3. **框架集成**:Oops Framework提供统一的配置访问接口
|
||
|
||
**章节来源**
|
||
- [Main.ts](file://assets/script/Main.ts#L25-L30)
|
||
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L25-L35)
|
||
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L194-L195)
|
||
|
||
## 配置加载生命周期
|
||
|
||
### 启动流程分析
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant Main as "Main.ts"
|
||
participant Initialize as "Initialize.ts"
|
||
participant SMComp as "SingletonModuleComp"
|
||
participant Oops as "Oops Framework"
|
||
participant Config as "config.json"
|
||
Main->>Initialize : 创建Initialize实体
|
||
Main->>SMComp : 初始化SingletonModule
|
||
Initialize->>Config : 加载配置文件
|
||
Config-->>Initialize : 返回配置数据
|
||
Initialize->>Oops : 注入配置到框架
|
||
Oops-->>Initialize : 配置就绪
|
||
Initialize->>Initialize : 执行异步队列
|
||
Initialize->>Initialize : 加载语言包
|
||
Initialize->>Initialize : 加载公共资源
|
||
Initialize->>SMComp : 完成配置注入
|
||
SMComp-->>Main : 初始化完成
|
||
```
|
||
|
||
**图表来源**
|
||
- [Main.ts](file://assets/script/Main.ts#L25-L35)
|
||
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L25-L45)
|
||
|
||
### 生命周期阶段详解
|
||
|
||
#### 1. 应用启动阶段
|
||
- Main.ts作为应用入口点,负责初始化Oops Framework
|
||
- 创建Initialize实体并注入到系统中
|
||
|
||
#### 2. 配置加载阶段
|
||
- Initialize模块按顺序执行配置加载任务
|
||
- 包括自定义内容、语言包、公共资源的加载
|
||
|
||
#### 3. 配置注入阶段
|
||
- 将加载的配置数据注入到Oops Framework中
|
||
- 通过SingletonModuleComp实现全局访问
|
||
|
||
#### 4. 系统初始化阶段
|
||
- 完成所有配置相关的工作后,系统进入正常运行状态
|
||
|
||
**章节来源**
|
||
- [Main.ts](file://assets/script/Main.ts#L25-L41)
|
||
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L25-L45)
|
||
|
||
## 配置管理模式
|
||
|
||
### SingletonModuleComp 实现
|
||
|
||
`SingletonModuleComp`是配置管理的核心组件,实现了全局配置的统一管理:
|
||
|
||
```mermaid
|
||
classDiagram
|
||
class SingletonModuleComp {
|
||
+initialize : Initialize
|
||
+map : GameMap
|
||
+openid : string
|
||
+mission : object
|
||
+guides : array
|
||
+current_guide : number
|
||
+data : object
|
||
+fight_hero : number
|
||
+heros : array
|
||
+monsters : array
|
||
+vmdata : object
|
||
+vmAdd() void
|
||
+reset() void
|
||
+updateCloudData() boolean
|
||
+getCloudData() void
|
||
+overrideLocalDataWithRemote(data) void
|
||
+addHero(hero_uuid) boolean
|
||
+updateFihgtHero(heroId) boolean
|
||
+updateGold(gold) boolean
|
||
+finishGuide(index) void
|
||
+error() void
|
||
}
|
||
class VM {
|
||
+add(data, name) void
|
||
}
|
||
SingletonModuleComp --> VM : "使用MVVM"
|
||
```
|
||
|
||
**图表来源**
|
||
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L20-L195)
|
||
|
||
### 全局访问模式
|
||
|
||
配置系统采用以下模式实现全局访问:
|
||
|
||
1. **静态实例模式**:通过`smc`变量提供全局访问点
|
||
2. **MVVM绑定**:使用ViewModel实现数据双向绑定
|
||
3. **事件驱动**:通过GameEvent系统通知配置变更
|
||
|
||
**章节来源**
|
||
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L194-L195)
|
||
|
||
## 多语言配置体系
|
||
|
||
### 语言配置结构
|
||
|
||
```mermaid
|
||
graph LR
|
||
subgraph "语言配置"
|
||
LangType["语言类型列表<br/>['zh', 'en']"]
|
||
LangPath["语言路径映射<br/>json: 'language/json'<br/>texture: 'language/texture'"]
|
||
end
|
||
subgraph "资源文件"
|
||
ZhJSON["zh.json<br/>中文语言包"]
|
||
EnJSON["en.json<br/>英文语言包"]
|
||
FontFiles["字体文件<br/>language/font/"]
|
||
end
|
||
LangType --> ZhJSON
|
||
LangType --> EnJSON
|
||
LangPath --> ZhJSON
|
||
LangPath --> EnJSON
|
||
LangPath --> FontFiles
|
||
```
|
||
|
||
**图表来源**
|
||
- [config.json](file://assets/resources/config.json#L12-L20)
|
||
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L60-L75)
|
||
|
||
### 多语言加载流程
|
||
|
||
1. **语言检测**:从本地存储获取用户语言偏好
|
||
2. **默认设置**:未设置时默认使用中文(zh)
|
||
3. **资源加载**:加载对应语言的JSON和字体资源
|
||
4. **动态切换**:支持运行时语言切换
|
||
|
||
**章节来源**
|
||
- [config.json](file://assets/resources/config.json#L12-L20)
|
||
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L60-L75)
|
||
|
||
## 配置热更新机制
|
||
|
||
### 热更新可行性分析
|
||
|
||
基于现有架构,配置系统支持以下热更新特性:
|
||
|
||
#### 支持的热更新场景
|
||
- **语言包更新**:无需重启即可切换语言
|
||
- **界面配置更新**:动态调整UI布局和样式
|
||
- **游戏参数调整**:实时修改游戏平衡性参数
|
||
|
||
#### 热更新限制
|
||
- **核心配置限制**:HTTP服务器地址、加密密钥等关键配置无法热更新
|
||
- **版本兼容性**:需要考虑客户端与服务器的版本兼容性
|
||
- **数据一致性**:热更新可能导致数据不一致问题
|
||
|
||
### 配置同步机制
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
Start([开始配置同步]) --> CheckClient{"检查客户端类型"}
|
||
CheckClient --> |微信客户端| LoadCloud["加载云端配置"]
|
||
CheckClient --> |本地调试| LoadLocal["加载本地配置"]
|
||
LoadCloud --> CloudSuccess{"云端加载成功?"}
|
||
CloudSuccess --> |是| OverrideLocal["覆盖本地配置"]
|
||
CloudSuccess --> |否| UseLocal["使用本地配置"]
|
||
LoadLocal --> OverrideLocal
|
||
OverrideLocal --> UpdateSMC["更新SingletonModule"]
|
||
UseLocal --> UpdateSMC
|
||
UpdateSMC --> NotifyChange["通知配置变更"]
|
||
NotifyChange --> End([同步完成])
|
||
```
|
||
|
||
**图表来源**
|
||
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L105-L150)
|
||
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L80-L120)
|
||
|
||
**章节来源**
|
||
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L105-L150)
|
||
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L80-L120)
|
||
|
||
## 最佳实践指南
|
||
|
||
### 敏感信息保护
|
||
|
||
#### 加密存储策略
|
||
1. **本地数据加密**:使用AES加密算法保护敏感数据
|
||
2. **密钥管理**:定期轮换加密密钥
|
||
3. **传输安全**:HTTPS协议确保数据传输安全
|
||
|
||
#### 配置文件保护
|
||
1. **权限控制**:限制配置文件的读写权限
|
||
2. **备份策略**:定期备份配置文件
|
||
3. **审计日志**:记录配置变更操作
|
||
|
||
### 多环境配置管理
|
||
|
||
#### 开发环境配置
|
||
```json
|
||
{
|
||
"config": {
|
||
"httpServer": "http://localhost:3000/",
|
||
"httpTimeout": 5000,
|
||
"frameRate": 60
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 生产环境配置
|
||
```json
|
||
{
|
||
"config": {
|
||
"httpServer": "https://api.game.com/",
|
||
"httpTimeout": 10000,
|
||
"frameRate": 60
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 测试环境配置
|
||
```json
|
||
{
|
||
"config": {
|
||
"httpServer": "http://test.api.com/",
|
||
"httpTimeout": 8000,
|
||
"frameRate": 30
|
||
}
|
||
}
|
||
```
|
||
|
||
### 配置校验机制
|
||
|
||
#### 配置验证规则
|
||
1. **必填字段检查**:确保关键配置字段存在
|
||
2. **数据类型验证**:验证配置值的数据类型正确性
|
||
3. **范围约束检查**:确保数值在合理范围内
|
||
4. **格式规范验证**:验证URL、邮箱等格式
|
||
|
||
#### 错误处理策略
|
||
1. **默认值回退**:配置错误时使用默认值
|
||
2. **警告日志记录**:记录配置错误但不影响系统运行
|
||
3. **优雅降级**:部分配置错误时系统仍可运行
|
||
|
||
### 性能优化建议
|
||
|
||
#### 配置加载优化
|
||
1. **延迟加载**:非关键配置采用延迟加载
|
||
2. **缓存策略**:合理使用内存缓存
|
||
3. **压缩传输**:减少配置文件大小
|
||
|
||
#### 内存管理
|
||
1. **及时释放**:不再使用的配置及时释放
|
||
2. **弱引用**:避免循环引用导致内存泄漏
|
||
3. **监控告警**:监控配置相关的内存使用
|
||
|
||
**章节来源**
|
||
- [config.json](file://assets/resources/config.json#L1-L21)
|
||
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L105-L150)
|
||
|
||
## 故障排除
|
||
|
||
### 常见配置问题
|
||
|
||
#### 配置文件加载失败
|
||
**症状**:游戏启动时配置加载异常
|
||
**原因**:
|
||
- config.json文件缺失或损坏
|
||
- 文件编码格式不正确
|
||
- 文件路径配置错误
|
||
|
||
**解决方案**:
|
||
1. 检查config.json文件是否存在且完整
|
||
2. 验证JSON格式的正确性
|
||
3. 确认文件编码为UTF-8
|
||
|
||
#### 语言切换失效
|
||
**症状**:语言切换后界面文字未更新
|
||
**原因**:
|
||
- 语言包文件缺失
|
||
- 语言资源路径配置错误
|
||
- 缓存未清除
|
||
|
||
**解决方案**:
|
||
1. 检查语言包文件完整性
|
||
2. 验证语言路径配置
|
||
3. 清除语言缓存重新加载
|
||
|
||
#### 网络配置异常
|
||
**症状**:游戏无法连接服务器
|
||
**原因**:
|
||
- HTTP服务器地址配置错误
|
||
- 网络连接超时
|
||
- 防火墙阻止连接
|
||
|
||
**解决方案**:
|
||
1. 验证服务器地址配置
|
||
2. 检查网络连接状态
|
||
3. 调整超时时间设置
|
||
|
||
### 调试技巧
|
||
|
||
#### 配置日志记录
|
||
```typescript
|
||
// 启用配置调试日志
|
||
oops.log.logConfig("配置加载完成: %o", configData);
|
||
```
|
||
|
||
#### 配置验证工具
|
||
```typescript
|
||
// 配置完整性检查
|
||
function validateConfig(config: any): boolean {
|
||
const requiredFields = ['version', 'package', 'httpServer'];
|
||
return requiredFields.every(field => config[field] !== undefined);
|
||
}
|
||
```
|
||
|
||
**章节来源**
|
||
- [Initialize.ts](file://assets/script/game/initialize/Initialize.ts#L40-L50)
|
||
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L180-L195)
|
||
|
||
## 总结
|
||
|
||
本项目构建了一个完整而灵活的配置管理系统,具有以下特点:
|
||
|
||
### 核心优势
|
||
1. **集中化管理**:以config.json为核心,统一管理所有配置信息
|
||
2. **模块化设计**:清晰的职责分离,便于维护和扩展
|
||
3. **框架集成**:与Oops Framework深度集成,提供丰富的配置功能
|
||
4. **多语言支持**:完整的国际化解决方案
|
||
5. **热更新能力**:支持运行时配置更新
|
||
|
||
### 技术亮点
|
||
- **单例模式**:确保配置的全局唯一性和一致性
|
||
- **异步加载**:优化游戏启动性能
|
||
- **加密保护**:保障用户数据安全
|
||
- **事件驱动**:支持配置变更的通知机制
|
||
|
||
### 应用价值
|
||
该配置管理系统为游戏开发提供了稳定可靠的基础设施,支持快速迭代和多平台部署,是现代游戏开发中不可或缺的重要组成部分。通过合理的配置管理,可以显著提高开发效率,降低维护成本,为玩家提供更好的游戏体验。 |