169 lines
7.4 KiB
Markdown
169 lines
7.4 KiB
Markdown
# 奖励数据流
|
||
|
||
<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的同步策略确保了数据的可靠性和可访问性。为防止数据丢失,建议建立完善的调试机制,重点关注事件触发、数据初始化、参数传递和异常处理等关键环节。 |