# 基地组件状态同步 **本文档引用的文件** - [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts) - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts) - [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts) - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts) - [CardController.ts](file://assets/script/game/map/CardController.ts) ## 目录 1. [简介](#简介) 2. [项目结构概览](#项目结构概览) 3. [核心组件分析](#核心组件分析) 4. [架构设计](#架构设计) 5. [详细组件分析](#详细组件分析) 6. [事件驱动机制](#事件驱动机制) 7. [微信小游戏适配](#微信小游戏适配) 8. [组件间协作流程](#组件间协作流程) 9. [性能考虑](#性能考虑) 10. [总结](#总结) ## 简介 MissionHomeComp是游戏中的基地状态视图控制器,负责管理基地界面的状态切换和UI更新。该组件在MissionEnd事件触发时激活基地节点,并通过home_active方法完成界面状态的恢复。同时,它还提供了微信小游戏环境检测、按钮交互接口预留等功能,确保游戏能够在不同平台环境下正常运行。 ## 项目结构概览 ```mermaid graph TB subgraph "游戏地图模块" MissionHomeComp["MissionHomeComp
基地视图控制器"] MissionComp["MissionComp
任务控制器"] CardController["CardController
卡片控制器"] end subgraph "事件系统" GameEvent["GameEvent
游戏事件定义"] EventDispatcher["事件分发器"] end subgraph "单例模块" SingletonModule["SingletonModuleComp
全局状态管理"] end MissionHomeComp --> GameEvent MissionComp --> GameEvent MissionHomeComp --> SingletonModule MissionComp --> SingletonModule CardController --> MissionHomeComp EventDispatcher --> MissionHomeComp EventDispatcher --> MissionComp ``` **图表来源** - [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L1-L53) - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L1-L151) - [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts#L1-L70) ## 核心组件分析 ### MissionHomeComp组件特性 MissionHomeComp继承自CCComp基类,采用ECS架构模式,具有以下核心特性: - **事件监听机制**:通过on方法监听MissionEnd事件 - **状态管理**:提供home_active方法管理基地界面状态 - **环境适配**:包含isWxClient方法检测微信环境 - **扩展接口**:预留btn_func方法用于按钮交互扩展 ### MissionComp组件职责 MissionComp负责整个战斗流程的控制,包括: - 战斗开始、结束的生命周期管理 - 英雄死亡、怪物死亡的事件处理 - 奖励发放和数据初始化 - 组件清理和资源回收 **章节来源** - [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L11-L53) - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L17-L151) ## 架构设计 ```mermaid classDiagram class MissionHomeComp { +onLoad() void +start() void +mission_end() void +home_active() void +uodate_data() void +isWxClient() boolean +btn_func(e, data) void +reset() void } class MissionComp { +onLoad() void +update(dt) void +mission_start() void +mission_end() void +fight_end() void +do_mon_dead(event, data) void +do_hero_dead(event, data) void +cleanComponents() void +reset() void } class SingletonModuleComp { +mission object +vmdata object +isWxClient() boolean +updateGold(gold) boolean +addHero(hero_uuid) boolean } class GameEvent { <> MissionEnd FightEnd MissionStart HeroDead MonDead } MissionHomeComp --> GameEvent : 监听 MissionComp --> GameEvent : 触发 MissionHomeComp --> SingletonModuleComp : 使用 MissionComp --> SingletonModuleComp : 使用 ``` **图表来源** - [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L13-L53) - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L17-L151) - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L25-L195) ## 详细组件分析 ### MissionHomeComp核心方法解析 #### mission_end方法 - 事件响应入口 当MissionEnd事件触发时,mission_end方法被调用,这是基地状态恢复的关键入口点。 ```mermaid sequenceDiagram participant MissionComp as "MissionComp" participant GameEvent as "GameEvent" participant MissionHomeComp as "MissionHomeComp" participant UI as "UI界面" MissionComp->>GameEvent : 触发MissionEnd事件 GameEvent->>MissionHomeComp : 分发事件到mission_end MissionHomeComp->>MissionHomeComp : 调用home_active() MissionHomeComp->>MissionHomeComp : 调用uodate_data() MissionHomeComp->>UI : 设置node.active=true UI-->>MissionHomeComp : 界面激活完成 ``` **图表来源** - [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L26-L32) - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L114-L120) #### home_active方法 - 状态激活逻辑 home_active方法是基地界面激活的核心逻辑,包含两个关键步骤: 1. **数据更新**:调用uodate_data()方法(当前为空,但设计意图明确) 2. **界面激活**:设置节点可见性 #### uodate_data方法 - 设计意图分析 虽然当前实现为空,但从命名和设计模式来看,uodate_data方法预期用于: - 同步基地生命值信息 - 更新防御状态数据 - 刷新基地资源显示 - 更新英雄驻守状态 这种设计遵循了MVVM模式的思想,为未来的数据绑定和自动更新做好准备。 #### isWxClient方法 - 平台检测机制 ```typescript isWxClient(){ return typeof wx !== 'undefined' && typeof (wx as any).getSystemInfoSync === 'function'; } ``` 该方法通过检查wx对象的存在性和特定方法来判断是否运行在微信环境中,为微信小游戏特性提供支持。 #### btn_func方法 - 交互接口预留 btn_func方法作为按钮交互的预留接口,为未来扩展按钮功能提供便利: - 参数e:事件名称或类型标识 - 参数data:附加数据对象 - 设计目的:支持按钮点击、触摸等交互事件 **章节来源** - [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L26-L53) ### MissionComp战斗流程管理 #### 事件监听机制 MissionComp通过on方法注册多个事件监听器: ```mermaid flowchart TD Start([游戏启动]) --> MissionStart["监听MissionStart事件"] MissionStart --> FightReady["监听FightReady事件"] FightReady --> FightStart["监听FightStart事件"] FightStart --> MonDead["监听MonDead事件"] MonDead --> HeroDead["监听HeroDead事件"] HeroDead --> FightEnd["监听FightEnd事件"] FightEnd --> MissionEnd["监听MissionEnd事件"] MissionEnd --> MissionEndLogic["执行mission_end逻辑"] MissionEndLogic --> CleanComponents["清理组件"] CleanComponents --> End([流程结束]) ``` **图表来源** - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L28-L36) #### 战斗状态管理 MissionComp维护复杂的战斗状态,包括: - `smc.mission.play`:战斗是否进行中 - `smc.mission.pause`:战斗是否暂停 - `smc.mission.in_fight`:是否处于战斗状态 - `smc.vmdata.mission_data`:战斗数据统计 **章节来源** - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L28-L151) ## 事件驱动机制 ### 事件流分析 ```mermaid sequenceDiagram participant Player as "玩家" participant MissionComp as "MissionComp" participant GameEvent as "GameEvent" participant MissionHomeComp as "MissionHomeComp" participant UI as "UI界面" Player->>MissionComp : 开始战斗 MissionComp->>GameEvent : 触发MissionStart GameEvent->>MissionComp : 分发事件 MissionComp->>MissionComp : mission_start() MissionComp->>UI : 显示战斗界面 Note over MissionComp : 战斗进行中... Player->>MissionComp : 英雄死亡 MissionComp->>GameEvent : 触发HeroDead GameEvent->>MissionComp : 分发事件 MissionComp->>MissionComp : do_hero_dead() MissionComp->>GameEvent : 触发FightEnd GameEvent->>MissionComp : 分发事件 MissionComp->>MissionComp : fight_end() MissionComp->>GameEvent : 触发MissionEnd GameEvent->>MissionHomeComp : 分发事件 MissionHomeComp->>MissionHomeComp : mission_end() MissionHomeComp->>MissionHomeComp : home_active() MissionHomeComp->>UI : 激活基地界面 ``` **图表来源** - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L66-L120) - [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L26-L32) ### GameEvent枚举定义 GameEvent枚举定义了游戏中的所有事件类型,其中MissionEnd事件是基地状态恢复的关键触发点。 **章节来源** - [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts#L1-L70) ## 微信小游戏适配 ### 平台检测机制 ```mermaid flowchart TD Start([应用启动]) --> CheckWx["检查wx对象存在性"] CheckWx --> HasWx{"wx对象存在?"} HasWx --> |否| WebPlatform["Web平台"] HasWx --> |是| CheckMethod["检查getSystemInfoSync方法"] CheckMethod --> HasMethod{"方法存在?"} HasMethod --> |否| OtherPlatform["其他平台"] HasMethod --> |是| WeChatPlatform["微信平台"] WebPlatform --> DisableFeatures["禁用微信特性"] OtherPlatform --> DisableFeatures WeChatPlatform --> EnableFeatures["启用微信特性"] ``` **图表来源** - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L58-L62) - [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L40-L42) ### 数据同步机制 isWxClient方法不仅用于环境检测,还为后续的数据同步功能提供基础。当检测到微信环境时,系统会启用云端数据同步功能。 **章节来源** - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L58-L195) ## 组件间协作流程 ### 基地状态恢复完整流程 ```mermaid flowchart TD BattleEnd([战斗结束]) --> MissionEndEvent["触发MissionEnd事件"] MissionEndEvent --> MissionHomeComp["MissionHomeComp接收事件"] MissionHomeComp --> MissionEndMethod["调用mission_end方法"] MissionEndMethod --> HomeActive["调用home_active方法"] HomeActive --> UpdateData["调用uodate_data方法"] UpdateData --> ActivateNode["设置node.active=true"] ActivateNode --> ShowUI["显示基地界面"] ShowUI --> CheckWx{"检查微信环境"} CheckWx --> |是| SyncData["同步云端数据"] CheckWx --> |否| Complete["流程完成"] SyncData --> Complete ``` **图表来源** - [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L26-L35) - [CardController.ts](file://assets/script/game/map/CardController.ts#L32-L35) ### CardController集成 CardController作为页面控制器,负责在战斗界面和基地界面之间切换: ```typescript page_init(){ this.node.getChildByName("mission_home").active=true; this.node.getChildByName("mission").active=false; } ``` 这种设计实现了清晰的界面分离,确保用户能够直观地从战斗状态过渡到基地状态。 **章节来源** - [CardController.ts](file://assets/script/game/map/CardController.ts#L32-L35) ## 性能考虑 ### 内存管理策略 MissionHomeComp实现了reset方法来处理组件销毁和内存释放: ```typescript reset() { this.node.destroy(); } ``` 这种方法确保了组件在不需要时能够及时释放资源,避免内存泄漏。 ### 事件监听优化 通过精确的事件监听机制,避免了不必要的回调调用,提高了整体性能。 ### 状态同步优化 uodate_data方法的预留设计允许未来实现增量更新,减少不必要的UI刷新操作。 ## 总结 MissionHomeComp作为基地状态的视图控制器,在游戏架构中扮演着重要角色。它通过事件驱动机制实现了从战斗到基地状态的平滑过渡,同时为未来的功能扩展预留了充足的空间。 ### 主要特点 1. **事件驱动架构**:通过MissionEnd事件触发基地状态恢复 2. **状态管理清晰**:home_active方法封装了界面激活逻辑 3. **平台适配完善**:isWxClient方法支持微信小游戏特性 4. **扩展性强**:btn_func方法预留了按钮交互接口 5. **性能优化**:合理的内存管理和事件监听机制 ### 设计优势 - **模块化设计**:MissionHomeComp独立于具体业务逻辑 - **可测试性**:清晰的方法边界便于单元测试 - **可维护性**:预留的扩展接口降低了未来修改的成本 - **跨平台兼容**:完善的平台检测机制确保多环境支持 这种设计模式体现了现代游戏开发中关注分离、可扩展性和平台兼容性的最佳实践,为构建高质量的游戏应用奠定了坚实基础。