Files
pixelheros/.qoder/repowiki/zh/content/奖励系统/奖励机制/奖励数据流.md
panw 4235e3b776 refactor(game): 移除已弃用的事件常量
- 删除 UpdateHero 和 UpdateFightHero 事件
- 移除 MISSION_UPDATE 事件常量
- 优化游戏事件枚举定义
2025-10-28 16:15:47 +08:00

169 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 奖励数据流
<cite>
**本文档引用文件**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts)
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts)
- [Mon.ts](file://assets/script/game/hero/Mon.ts)
</cite>
## 目录
1. [引言](#引言)
2. [奖励数据生命周期](#奖励数据生命周期)
3. [rewards数组存储格式与UI展示](#rewards数组存储格式与ui展示)
4. [game_data对象累加逻辑](#game_data对象累加逻辑)
5. [数据同步策略](#数据同步策略)
6. [数据丢失问题调试](#数据丢失问题调试)
7. [结论](#结论)
## 引言
本文档系统阐述了奖励数据在MissionComp组件中的完整生命周期管理过程。从data_init方法初始化rewards数组和game_data对象开始到do_drop方法接收掉落物品参数并更新数据结构的全过程。详细解释了rewards数组的存储格式设计及其与UI展示的对应关系分析了game_data对象中exp、gold、diamond字段的累加逻辑与数据一致性保障机制说明了MissionComp与全局状态管理smc.vmdata.mission_data的数据同步策略并提供了数据丢失问题的调试方法。
## 奖励数据生命周期
奖励数据在MissionComp组件中的生命周期始于任务开始时的初始化终于任务结束时的数据清理。整个生命周期通过事件驱动的方式进行管理确保数据的准确性和一致性。
```mermaid
flowchart TD
A["任务开始 MissionStart"] --> B["data_init初始化"]
B --> C["do_drop接收掉落物品"]
C --> D["更新rewards数组"]
D --> E["更新game_data对象"]
E --> F["任务结束 FightEnd"]
F --> G["数据同步到全局状态"]
G --> H["打开胜利界面"]
```
**Diagram sources**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L0-L150)
**Section sources**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L0-L150)
## rewards数组存储格式与UI展示
rewards数组用于存储任务过程中获得的所有掉落物品信息。该数组在data_init方法中被初始化为空数组随着任务进行逐步填充。数组的设计考虑了后续UI展示的需求每个元素代表一个掉落物品。
```mermaid
classDiagram
class MissionComp {
+rewards : any[]
+game_data : any
+data_init()
+do_drop(drop_item[], game_data)
}
class VictoryComp {
+rewards : any[]
+game_data : any
+onAdded(args)
}
MissionComp --> VictoryComp : "传递数据"
```
当任务结束时rewards数组作为参数传递给胜利界面(VictoryComp),实现数据的跨组件传递。这种设计模式确保了奖励数据的完整性和可追溯性。
**Diagram sources**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L0-L33)
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L0-L37)
**Section sources**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L0-L33)
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L0-L37)
## game_data对象累加逻辑
game_data对象包含exp、gold、diamond三个核心字段用于记录任务过程中的经验值、金币和钻石奖励。这些数据的累加逻辑通过do_drop方法实现确保每次获得奖励时都能正确更新。
```mermaid
flowchart LR
A["do_drop方法"] --> B["接收game_data参数"]
B --> C{"参数有效性检查"}
C --> |有效| D["累加exp、gold、diamond"]
C --> |无效| E["使用默认值{exp:0,gold:0,diamond:0}"]
D --> F["更新本地game_data对象"]
F --> G["数据一致性保障"]
```
数据一致性通过以下机制保障:
1. 初始化时设置默认值
2. 参数传递时提供默认值
3. 事件驱动更新,避免直接修改
4. 任务结束时统一同步到全局状态
**Diagram sources**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L32-L70)
**Section sources**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L32-L70)
## 数据同步策略
MissionComp组件与全局状态管理smc.vmdata.mission_data之间采用事件驱动的数据同步策略。当特定事件发生时相关数据会被同步到全局状态确保数据的一致性和可访问性。
```mermaid
sequenceDiagram
participant MissionComp
participant smc_vmdata
participant VictoryComp
MissionComp->>MissionComp : data_init()
MissionComp->>smc_vmdata : 初始化mission_data状态
MissionComp->>MissionComp : do_drop(drop_item, game_data)
MissionComp->>MissionComp : 更新本地数据
MissionComp->>smc_vmdata : 同步关键状态(如mon_num)
MissionComp->>VictoryComp : FightEnd事件
VictoryComp->>VictoryComp : 接收rewards和game_data
VictoryComp->>smc_vmdata : 最终数据持久化
```
除了直接的奖励数据,其他任务相关状态如怪物数量(mon_num)、英雄数量(hero_num)等也会同步到全局状态,为其他组件提供必要的上下文信息。
**Diagram sources**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L66-L116)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L102-L136)
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L57-L93)
**Section sources**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L66-L116)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L102-L136)
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L57-L93)
## 数据丢失问题调试
为确保奖励数据的完整性和可靠性,需要建立系统的调试方法来检测和解决潜在的数据丢失问题。以下是常见的调试策略和检查点:
```mermaid
flowchart TD
A["数据丢失问题"] --> B["检查事件监听"]
A --> C["验证数据初始化"]
A --> D["确认数据传递"]
A --> E["检查异常处理"]
B --> B1["MissionStart事件是否正确触发"]
B --> B2["do_drop事件参数是否完整"]
B --> B3["FightEnd事件是否携带数据"]
C --> C1["data_init是否清空rewards数组"]
C --> C2["game_data是否重置为默认值"]
D --> D1["胜利界面是否正确接收参数"]
D --> D2["数据结构是否匹配"]
E --> E1["异常情况下数据是否保存"]
E --> E2["网络中断时的恢复机制"]
```
关键调试检查点包括:
1. 确认data_init方法在每次任务开始时都被正确调用
2. 验证do_drop方法接收的参数格式是否符合预期
3. 检查FightEnd事件触发时是否正确传递了rewards和game_data
4. 确保异常情况下(如游戏崩溃)有适当的数据恢复机制
5. 验证全局状态smc.vmdata.mission_data的更新时机和内容
**Diagram sources**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L114-L150)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L47-L86)
**Section sources**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L114-L150)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L47-L86)
## 结论
MissionComp组件中的奖励数据管理采用了一套完整的生命周期管理体系。通过data_init方法初始化数据结构do_drop方法处理奖励更新最终通过事件机制将数据传递给胜利界面展示。rewards数组和game_data对象的设计充分考虑了UI展示需求和数据一致性要求。与全局状态管理smc.vmdata.mission_data的同步策略确保了数据的可靠性和可访问性。为防止数据丢失建议建立完善的调试机制重点关注事件触发、数据初始化、参数传递和异常处理等关键环节。