473 lines
13 KiB
Markdown
473 lines
13 KiB
Markdown
# 辅助系统
|
||
|
||
<cite>
|
||
**本文档中引用的文件**
|
||
- [Guide.ts](file://assets/script/game/common/config/Guide.ts)
|
||
- [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts)
|
||
- [GuideSetpComp.ts](file://assets/script/game/map/GuideSetpComp.ts)
|
||
- [GameUIConfig.ts](file://assets/script/game/common/config/GameUIConfig.ts)
|
||
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts)
|
||
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts)
|
||
- [log.md](file://doc/core/common/log.md)
|
||
- [audio.md](file://doc/core/common/audio.md)
|
||
</cite>
|
||
|
||
## 目录
|
||
1. [简介](#简介)
|
||
2. [项目结构](#项目结构)
|
||
3. [核心组件](#核心组件)
|
||
4. [架构概览](#架构概览)
|
||
5. [详细组件分析](#详细组件分析)
|
||
6. [依赖关系分析](#依赖关系分析)
|
||
7. [性能考虑](#性能考虑)
|
||
8. [故障排除指南](#故障排除指南)
|
||
9. [结论](#结论)
|
||
|
||
## 简介
|
||
|
||
辅助系统是Cocos游戏框架中的重要组成部分,主要负责新手引导、日志输出管理和音效控制三大核心功能。该系统采用模块化设计,通过事件驱动的方式实现各功能模块间的解耦,提供了灵活且可扩展的辅助功能支持。
|
||
|
||
系统的核心特点包括:
|
||
- **新手引导系统**:提供可视化的操作指导,支持多种交互类型的引导步骤
|
||
- **日志管理系统**:封装了丰富的日志输出功能,支持不同级别的日志分类
|
||
- **音效控制系统**:管理背景音乐和音效的播放、暂停、音量控制等功能
|
||
|
||
## 项目结构
|
||
|
||
辅助系统的文件组织结构清晰,按功能模块进行分类:
|
||
|
||
```mermaid
|
||
graph TB
|
||
subgraph "配置层"
|
||
A[Guide.ts<br/>引导配置]
|
||
B[GameUIConfig.ts<br/>UI配置]
|
||
C[GameEvent.ts<br/>事件定义]
|
||
end
|
||
subgraph "组件层"
|
||
D[GuideConComp.ts<br/>引导控制器]
|
||
E[GuideSetpComp.ts<br/>引导步骤组件]
|
||
F[SingletonModuleComp.ts<br/>单例模块]
|
||
end
|
||
subgraph "工具层"
|
||
G[log.md<br/>日志规范]
|
||
H[audio.md<br/>音效规范]
|
||
end
|
||
A --> D
|
||
A --> E
|
||
B --> D
|
||
C --> D
|
||
D --> F
|
||
E --> F
|
||
```
|
||
|
||
**图表来源**
|
||
- [Guide.ts](file://assets/script/game/common/config/Guide.ts#L1-L50)
|
||
- [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L1-L30)
|
||
- [GameUIConfig.ts](file://assets/script/game/common/config/GameUIConfig.ts#L1-L20)
|
||
|
||
**章节来源**
|
||
- [Guide.ts](file://assets/script/game/common/config/Guide.ts#L1-L283)
|
||
- [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L1-L220)
|
||
|
||
## 核心组件
|
||
|
||
### 引导系统核心组件
|
||
|
||
引导系统包含三个核心组件,每个组件承担不同的职责:
|
||
|
||
1. **GuideConfig**:引导配置管理器,负责引导步骤的定义和查找
|
||
2. **GuideConComp**:引导控制器,负责引导流程的控制和状态管理
|
||
3. **GuideSetpComp**:引导步骤组件,负责具体的UI显示和用户交互
|
||
|
||
### 日志系统核心组件
|
||
|
||
日志系统基于Oops Framework的日志管理模块,提供以下功能:
|
||
- 标准日志输出
|
||
- 分类日志(配置、网络、数据、业务、视图)
|
||
- 性能监控(执行时间统计)
|
||
- 表格格式化输出
|
||
|
||
### 音效系统核心组件
|
||
|
||
音效系统提供完整的音频管理功能:
|
||
- 背景音乐播放控制
|
||
- 音效播放管理
|
||
- 音量调节和开关控制
|
||
- 音频资源的异步加载
|
||
|
||
**章节来源**
|
||
- [Guide.ts](file://assets/script/game/common/config/Guide.ts#L1-L100)
|
||
- [log.md](file://doc/core/common/log.md#L1-L30)
|
||
- [audio.md](file://doc/core/common/audio.md#L1-L85)
|
||
|
||
## 架构概览
|
||
|
||
辅助系统采用分层架构设计,确保各功能模块的独立性和可维护性:
|
||
|
||
```mermaid
|
||
graph TD
|
||
subgraph "表现层"
|
||
A[UI界面]
|
||
B[引导步骤UI]
|
||
C[日志输出界面]
|
||
end
|
||
subgraph "控制层"
|
||
D[GuideConComp<br/>引导控制器]
|
||
E[SingletonModuleComp<br/>单例模块]
|
||
F[事件管理器]
|
||
end
|
||
subgraph "服务层"
|
||
G[引导服务]
|
||
H[日志服务]
|
||
I[音效服务]
|
||
end
|
||
subgraph "数据层"
|
||
J[引导配置数据]
|
||
K[日志配置数据]
|
||
L[音效配置数据]
|
||
end
|
||
A --> D
|
||
B --> D
|
||
C --> H
|
||
D --> G
|
||
E --> G
|
||
F --> G
|
||
G --> J
|
||
H --> K
|
||
I --> L
|
||
```
|
||
|
||
**图表来源**
|
||
- [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L15-L35)
|
||
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L25-L50)
|
||
|
||
## 详细组件分析
|
||
|
||
### 引导系统详细分析
|
||
|
||
#### 引导配置结构
|
||
|
||
引导系统的核心是`IGuideStep`接口定义,它描述了引导步骤的所有属性:
|
||
|
||
```mermaid
|
||
classDiagram
|
||
class IGuideStep {
|
||
+string id
|
||
+GuideStepType type
|
||
+number key
|
||
+string targetPath
|
||
+string tipParent
|
||
+string tipText
|
||
+Vector2 tipOffset
|
||
+Vector2 handOffset
|
||
+string nextStep
|
||
+boolean skippable
|
||
+function condition
|
||
+UIID uiId
|
||
+number waitTime
|
||
+string end_event
|
||
+boolean noInput
|
||
}
|
||
class GuideStepType {
|
||
<<enumeration>>
|
||
CLICK
|
||
DRAG
|
||
TIP
|
||
WAIT
|
||
}
|
||
class GuideConfig {
|
||
+IGuideStep[] steps
|
||
+findGuideById(id) IGuideStep
|
||
+findGuideByNumberId(id) IGuideStep
|
||
+findGuideIndexById(id) number
|
||
}
|
||
IGuideStep --> GuideStepType
|
||
GuideConfig --> IGuideStep
|
||
```
|
||
|
||
**图表来源**
|
||
- [Guide.ts](file://assets/script/game/common/config/Guide.ts#L25-L55)
|
||
- [Guide.ts](file://assets/script/game/common/config/Guide.ts#L84-L110)
|
||
|
||
#### 引导流程执行逻辑
|
||
|
||
引导控制器负责管理整个引导流程的执行:
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant Player as 玩家
|
||
participant Controller as GuideConComp
|
||
participant StepComp as GuideSetpComp
|
||
participant SM as SingletonModuleComp
|
||
participant UI as UI系统
|
||
Player->>Controller : 触发引导事件
|
||
Controller->>Controller : 初始化引导进度
|
||
Controller->>StepComp : 创建引导步骤UI
|
||
StepComp->>UI : 显示引导界面
|
||
UI->>Player : 展示引导提示
|
||
Player->>StepComp : 完成引导操作
|
||
StepComp->>Controller : 步骤完成回调
|
||
Controller->>Controller : 检查下一步骤
|
||
alt 有下一步骤
|
||
Controller->>StepComp : 显示下个步骤
|
||
else 无下一步骤
|
||
Controller->>SM : 标记引导完成
|
||
Controller->>UI : 关闭引导界面
|
||
end
|
||
```
|
||
|
||
**图表来源**
|
||
- [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L50-L80)
|
||
- [GuideSetpComp.ts](file://assets/script/game/map/GuideSetpComp.ts#L80-L120)
|
||
|
||
#### UI高亮机制
|
||
|
||
引导步骤组件实现了精确的目标节点定位和高亮显示:
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[解析目标路径] --> B{路径有效?}
|
||
B --> |是| C[查找目标节点]
|
||
B --> |否| D[使用默认节点]
|
||
C --> E{找到节点?}
|
||
E --> |是| F[设置高亮样式]
|
||
E --> |否| G[记录错误日志]
|
||
D --> F
|
||
F --> H[计算手指位置]
|
||
H --> I[显示引导指示器]
|
||
G --> J[降级处理]
|
||
J --> I
|
||
```
|
||
|
||
**图表来源**
|
||
- [GuideSetpComp.ts](file://assets/script/game/map/GuideSetpComp.ts#L200-L250)
|
||
|
||
**章节来源**
|
||
- [Guide.ts](file://assets/script/game/common/config/Guide.ts#L25-L85)
|
||
- [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L50-L150)
|
||
- [GuideSetpComp.ts](file://assets/script/game/map/GuideSetpComp.ts#L150-L200)
|
||
|
||
### 日志系统详细分析
|
||
|
||
#### 日志输出规范
|
||
|
||
日志系统提供了六种不同级别的日志输出:
|
||
|
||
| 日志级别 | 方法名 | 颜色标识 | 使用场景 |
|
||
|---------|--------|----------|----------|
|
||
| 标准日志 | `oops.log.trace()` | 默认 | 通用调试信息 |
|
||
| 配置日志 | `oops.log.logConfig()` | 灰色 | 配置相关输出 |
|
||
| 网络日志 | `oops.log.logNet()` | 橙色 | 网络请求跟踪 |
|
||
| 数据日志 | `oops.log.logModel()` | 紫色 | 数据模型操作 |
|
||
| 业务日志 | `oops.log.logBusiness()` | 蓝色 | 业务逻辑执行 |
|
||
| 视图日志 | `oops.log.logView()` | 绿色 | UI界面交互 |
|
||
|
||
#### 性能监控功能
|
||
|
||
日志系统还提供了性能监控能力:
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
A[开始计时] --> B[执行代码段]
|
||
B --> C[结束计时]
|
||
C --> D[计算执行时间]
|
||
D --> E[输出性能日志]
|
||
F[表格数据] --> G[格式化输出]
|
||
G --> H[结构化日志]
|
||
```
|
||
|
||
**图表来源**
|
||
- [log.md](file://doc/core/common/log.md#L10-L25)
|
||
|
||
**章节来源**
|
||
- [log.md](file://doc/core/common/log.md#L1-L30)
|
||
|
||
### 音效系统详细分析
|
||
|
||
#### 音效资源管理
|
||
|
||
音效系统采用异步加载策略,确保游戏性能:
|
||
|
||
```mermaid
|
||
stateDiagram-v2
|
||
[*] --> 初始化
|
||
初始化 --> 加载中 : 请求播放
|
||
加载中 --> 播放就绪 : 资源加载完成
|
||
加载中 --> 加载失败 : 资源加载失败
|
||
播放就绪 --> 播放中 : 开始播放
|
||
播放中 --> 暂停 : 用户暂停
|
||
暂停 --> 播放中 : 用户继续
|
||
播放中 --> 停止 : 用户停止
|
||
停止 --> [*]
|
||
加载失败 --> [*]
|
||
```
|
||
|
||
#### 音量控制策略
|
||
|
||
音效系统提供了精细的音量控制:
|
||
|
||
| 功能 | 方法 | 参数范围 | 说明 |
|
||
|------|------|----------|------|
|
||
| 背景音乐音量 | `oops.audio.musicVolume` | 0.0 - 1.0 | 全局背景音乐音量 |
|
||
| 音效音量 | `oops.audio.volumeEffect` | 0.0 - 1.0 | 全局音效音量 |
|
||
| 音乐开关 | `oops.audio.switchMusic` | true/false | 控制背景音乐播放 |
|
||
| 音效开关 | `oops.audio.switchEffect` | true/false | 控制音效播放 |
|
||
|
||
**章节来源**
|
||
- [audio.md](file://doc/core/common/audio.md#L1-L85)
|
||
|
||
## 依赖关系分析
|
||
|
||
辅助系统的依赖关系体现了良好的模块化设计:
|
||
|
||
```mermaid
|
||
graph LR
|
||
subgraph "外部依赖"
|
||
A[Oops Framework]
|
||
B[Cocos Creator]
|
||
end
|
||
subgraph "核心模块"
|
||
C[Guide.ts]
|
||
D[GuideConComp.ts]
|
||
E[GuideSetpComp.ts]
|
||
F[SingletonModuleComp.ts]
|
||
end
|
||
subgraph "配置模块"
|
||
G[GameUIConfig.ts]
|
||
H[GameEvent.ts]
|
||
end
|
||
subgraph "工具模块"
|
||
I[log.md]
|
||
J[audio.md]
|
||
end
|
||
A --> C
|
||
A --> D
|
||
A --> E
|
||
B --> D
|
||
B --> E
|
||
C --> D
|
||
C --> E
|
||
G --> D
|
||
H --> D
|
||
F --> D
|
||
F --> E
|
||
```
|
||
|
||
**图表来源**
|
||
- [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L1-L10)
|
||
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L1-L15)
|
||
|
||
**章节来源**
|
||
- [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L1-L20)
|
||
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L1-L25)
|
||
|
||
## 性能考虑
|
||
|
||
辅助系统在设计时充分考虑了性能优化:
|
||
|
||
### 引导系统性能优化
|
||
|
||
1. **延迟加载**:引导UI仅在需要时创建和销毁
|
||
2. **内存管理**:及时清理不再使用的引导资源
|
||
3. **事件监听**:智能添加和移除触摸监听器
|
||
4. **节点查找**:缓存常用节点引用,避免重复查找
|
||
|
||
### 日志系统性能优化
|
||
|
||
1. **条件输出**:根据日志级别决定是否输出
|
||
2. **批量处理**:支持批量日志输出以减少I/O操作
|
||
3. **格式化优化**:使用高效的字符串拼接方法
|
||
|
||
### 音效系统性能优化
|
||
|
||
1. **预加载策略**:关键音效提前加载
|
||
2. **资源池管理**:复用音频资源减少内存占用
|
||
3. **异步加载**:避免阻塞主线程
|
||
|
||
## 故障排除指南
|
||
|
||
### 常见引导问题
|
||
|
||
#### 引导无法启动
|
||
**症状**:触发引导事件但没有显示任何提示
|
||
**原因分析**:
|
||
- 目标节点路径错误
|
||
- 引导配置数据缺失
|
||
- 引导进度状态异常
|
||
|
||
**解决方案**:
|
||
1. 检查`targetPath`是否正确
|
||
2. 验证`GuideConfig`配置
|
||
3. 重置引导进度:`smc.guides = []`
|
||
|
||
#### 引导步骤不连续
|
||
**症状**:引导过程中跳过了某些步骤
|
||
**原因分析**:
|
||
- `nextStep`配置错误
|
||
- 引导完成状态未正确更新
|
||
- 事件触发时机不当
|
||
|
||
**解决方案**:
|
||
1. 检查引导步骤的`nextStep`链接
|
||
2. 确认`smc.finishGuide()`调用
|
||
3. 验证事件触发顺序
|
||
|
||
### 日志系统问题
|
||
|
||
#### 日志输出格式异常
|
||
**症状**:日志时间戳或类别显示错误
|
||
**解决方案**:
|
||
检查日志配置和格式化函数
|
||
|
||
#### 性能监控失效
|
||
**症状**:执行时间统计不准确
|
||
**解决方案**:
|
||
确认`oops.log.start()`和`oops.log.end()`配对使用
|
||
|
||
### 音效系统问题
|
||
|
||
#### 音效无法播放
|
||
**症状**:音效请求后没有声音输出
|
||
**解决方案**:
|
||
1. 检查音效文件路径
|
||
2. 验证音量设置
|
||
3. 确认音频开关状态
|
||
|
||
#### 背景音乐重复播放
|
||
**症状**:同一首音乐多次播放
|
||
**解决方案**:
|
||
1. 检查音乐播放完成回调
|
||
2. 确认音乐切换逻辑
|
||
3. 清理旧的音乐实例
|
||
|
||
**章节来源**
|
||
- [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L180-L220)
|
||
- [log.md](file://doc/core/common/log.md#L15-L30)
|
||
- [audio.md](file://doc/core/common/audio.md#L40-L85)
|
||
|
||
## 结论
|
||
|
||
辅助系统作为游戏开发中的重要基础设施,提供了完整的新手引导、日志管理和音效控制功能。通过模块化的设计和事件驱动的架构,系统实现了高度的可扩展性和可维护性。
|
||
|
||
### 主要优势
|
||
|
||
1. **模块化设计**:各功能模块职责明确,便于维护和扩展
|
||
2. **事件驱动**:通过事件系统实现松耦合的组件通信
|
||
3. **配置灵活**:支持动态配置引导步骤和日志级别
|
||
4. **性能优化**:采用多种优化策略确保系统流畅运行
|
||
|
||
### 最佳实践建议
|
||
|
||
1. **引导设计**:合理规划引导步骤,避免过度引导影响用户体验
|
||
2. **日志管理**:根据环境设置合适的日志级别,生产环境避免过多调试信息
|
||
3. **音效控制**:注意音效的音量平衡,避免影响游戏体验
|
||
4. **资源管理**:及时释放不再使用的资源,防止内存泄漏
|
||
|
||
### 扩展方向
|
||
|
||
1. **多语言支持**:扩展引导文本的国际化功能
|
||
2. **自定义事件**:支持开发者自定义引导触发事件
|
||
3. **数据分析**:集成引导完成率等数据分析功能
|
||
4. **云端配置**:支持引导配置的云端动态更新
|
||
|
||
通过持续的优化和功能扩展,辅助系统将继续为游戏开发提供强有力的支持,帮助开发者构建更好的用户体验。 |