refactor(game): 移除已弃用的事件常量
- 删除 UpdateHero 和 UpdateFightHero 事件 - 移除 MISSION_UPDATE 事件常量 - 优化游戏事件枚举定义
This commit is contained in:
516
.qoder/repowiki/zh/content/数据管理/配置管理.md
Normal file
516
.qoder/repowiki/zh/content/数据管理/配置管理.md
Normal file
@@ -0,0 +1,516 @@
|
||||
# 配置管理
|
||||
|
||||
<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. **热更新能力**:支持运行时配置更新
|
||||
|
||||
### 技术亮点
|
||||
- **单例模式**:确保配置的全局唯一性和一致性
|
||||
- **异步加载**:优化游戏启动性能
|
||||
- **加密保护**:保障用户数据安全
|
||||
- **事件驱动**:支持配置变更的通知机制
|
||||
|
||||
### 应用价值
|
||||
该配置管理系统为游戏开发提供了稳定可靠的基础设施,支持快速迭代和多平台部署,是现代游戏开发中不可或缺的重要组成部分。通过合理的配置管理,可以显著提高开发效率,降低维护成本,为玩家提供更好的游戏体验。
|
||||
Reference in New Issue
Block a user