引入MonType枚举支持普通、精英、BOSS三种怪物类型 新增getMonAttr函数实现基于等级和类型的动态属性计算 更新Mon.ts的load和hero_init方法以支持新参数 扩展heroSet.ts添加多种新怪物类型配置 重构属性初始化流程,移除strengthMultiplier机制 更新相关文档和流程图反映最新设计
17 KiB
核心系统
**本文档引用的文件** - [Initialize.ts](file://assets/script/game/initialize/Initialize.ts) - [LoadingViewComp.ts](file://assets/script/game/initialize/view/LoadingViewComp.ts) - [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts) - [BoxSet.ts](file://assets/script/game/common/config/BoxSet.ts) - [Main.ts](file://assets/script/Main.ts) - [GameMap.ts](file://assets/script/game/map/GameMap.ts) - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts) - [event.md](file://doc/core/common/event.md) - [loader.md](file://doc/core/common/loader.md) - [storage.md](file://doc/core/common/storage.md) - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts) - *新增怪物类型配置与属性倍率* - [MissionMonComp.ts](file://assets/script/game/hero/Mon.ts) - *更新怪物生成逻辑*更新摘要
变更内容
- 新增怪物类型系统,支持普通/精英/Boss三种类型
- 添加怪物属性倍率配置,不同类型的怪物具有差异化属性
- 更新关卡生成逻辑,支持程序化生成不同类型的怪物组合
- 增强资源引用追踪,添加新修改文件的来源标注
目录
简介
本游戏采用基于Oops Framework的模块化架构,核心运行系统包含初始化流程、事件系统、资源加载与本地存储四大核心模块。系统通过异步队列管理初始化顺序,使用事件总线实现模块间解耦,采用分层资源管理模式,并提供安全可靠的本地存储机制。新增的怪物生成系统支持多种怪物类型和差异化属性配置。
项目架构概览
graph TB
subgraph "游戏入口"
Main[Main.ts]
Root[Root基类]
end
subgraph "初始化系统"
Init[Initialize.ts]
Loading[LoadingViewComp.ts]
end
subgraph "核心模块"
SMC[SingletonModuleComp]
Event[GameEvent.ts]
Box[BoxSet.ts]
end
subgraph "资源管理"
ResMgr[资源加载器]
Storage[本地存储]
Loader[异步队列]
end
subgraph "游戏内容"
Map[GameMap]
Monster[怪物生成系统]
Scene[场景管理]
end
Main --> Init
Init --> Loading
Init --> SMC
Loading --> Map
SMC --> Event
SMC --> Storage
Init --> ResMgr
ResMgr --> Loader
Map --> Monster
图表来源
初始化系统
Initialize.ts - 游戏启动核心
Initialize.ts作为游戏初始化的核心模块,负责管理整个启动流程,采用异步队列模式确保资源按序加载。
初始化流程架构
sequenceDiagram
participant Main as Main.ts
participant Init as Initialize
participant Queue as AsyncQueue
participant Loading as LoadingViewComp
participant SMC as SingletonModuleComp
Main->>Init : 创建Initialize实体
Init->>Queue : 创建异步队列
Init->>Queue : 添加loadCustom任务
Init->>Queue : 添加loadLanguage任务
Init->>Queue : 添加loadCommon任务
Init->>Queue : 添加onComplete回调
Queue->>Queue : 执行队列任务
Queue->>Loading : 打开加载界面
Loading->>SMC : 初始化游戏数据
Loading->>SMC : 加载地图资源
SMC->>SMC : 完成初始化
图表来源
核心初始化步骤
- 自定义内容加载:支持动态加载多语言字体和游戏配置
- 语言包加载:自动检测并设置默认语言
- 公共资源加载:加载游戏必需的基础资源
- 加载界面显示:展示资源加载进度
微信客户端适配
系统具备智能客户端识别能力,能够根据运行环境选择不同的数据加载策略:
- 微信客户端:连接云端数据库,实现数据实时同步
- 本地调试:使用本地预设数据,便于开发调试
章节来源
LoadingViewComp.ts - 启动画面交互
LoadingViewComp负责管理游戏启动过程中的视觉反馈和用户体验。
加载状态管理
stateDiagram-v2
[*] --> 初始化
初始化 --> 加载自定义资源 : loadCustom()
加载自定义资源 --> 加载游戏资源 : loadGameRes()
加载游戏资源 --> 加载完成 : onCompleteCallback()
加载完成 --> 销毁组件 : remove(LoadingViewComp)
销毁组件 --> [*]
加载自定义资源 : 显示"加载JSON数据"
加载游戏资源 : 显示"加载游戏内容"
图表来源
进度监控机制
系统提供实时的资源加载进度监控,包括:
- 当前完成数量
- 总资源数量
- 进度百分比计算
- 多语言提示文本更新
章节来源
事件系统
GameEvent.ts - 事件枚举定义
GameEvent.ts定义了游戏中的所有自定义事件类型,采用枚举方式组织,确保事件名称的一致性和可维护性。
事件分类体系
| 事件类别 | 事件名称 | 描述 |
|---|---|---|
| 游戏连接 | GameServerConnected | 游戏服务器连接成功 |
| 登录认证 | LoginSuccess | 登录成功事件 |
| 地图移动 | MAP_MOVE_END_LEFT/RIGHT | 地图移动结束事件 |
| 引导系统 | GuideStart/End/Complete | 引导流程控制事件 |
| 英雄系统 | UpdateHero/UpdateFightHero | 英雄数据更新事件 |
| 技能系统 | CastSkill/CastHeroSkill | 技能释放事件 |
| 战斗系统 | FightStart/Pause/Resume/End | 战斗状态控制事件 |
| 资源更新 | GOLD_UPDATE/DIAMOND_UPDATE/MEAT_UPDATE | 资源变化事件 |
事件总线使用模式
flowchart TD
A[事件发布者] --> B[oops.message.on/once]
B --> C[事件监听器]
C --> D[业务逻辑处理]
D --> E[事件响应完成]
F[事件取消] --> G[oops.message.off]
G --> H[移除监听器]
图表来源
事件系统最佳实践
- 持续监听:适用于长期关注的事件
- 一次性监听:适用于仅需响应一次的事件
- 内存管理:及时取消不再需要的事件监听
章节来源
资源加载系统
loader.md - 资源管理最佳实践
系统提供了完整的资源管理解决方案,涵盖从加载到释放的全生命周期管理。
资源加载模式
graph LR
subgraph "资源类型"
A[单个资源]
B[资源文件夹]
C[远程资源]
D[Bundle资源]
end
subgraph "加载方式"
E[同步加载]
F[异步加载]
G[进度回调]
H[完成回调]
end
A --> E
B --> F
C --> G
D --> H
图表来源
核心API功能
- 远程资源加载:支持网络图片和音频资源
- Bundle管理:支持多资源包的版本控制
- 进度监控:提供实时加载进度反馈
- 资源释放:自动清理无用资源,优化内存使用
异步加载队列
系统采用AsyncQueue实现资源加载的有序执行,确保关键资源优先加载,提升用户体验。
章节来源
本地存储系统
storage.md - 数据持久化机制
本地存储系统提供安全可靠的数据持久化解决方案,支持数据加密和多用户隔离。
存储架构设计
graph TB
subgraph "存储层次"
A[应用层API]
B[加密层]
C[平台层]
end
subgraph "存储介质"
D[Web Storage]
E[IndexedDB]
F[File System]
end
A --> B
B --> C
C --> D
C --> E
C --> F
图表来源
核心功能特性
- 数据加密:发布模式自动启用数据加密
- 用户隔离:支持多用户账号数据分离
- 跨平台兼容:统一的API接口适配不同平台
- 类型安全:支持多种数据类型的序列化存储
数据操作示例
| 操作类型 | API方法 | 功能描述 |
|---|---|---|
| 初始化 | oops.storage.init(key, vi) |
设置加密密钥 |
| 用户设置 | oops.storage.setUser(uid) |
设置用户标识 |
| 数据存储 | oops.storage.set(key, value) |
保存数据 |
| 数据读取 | oops.storage.get(key) |
获取数据 |
| 数据删除 | oops.storage.remove(key) |
删除数据 |
| 清空存储 | oops.storage.clear() |
清空所有数据 |
章节来源
碰撞分组配置
BoxSet.ts - 物理碰撞系统
BoxSet.ts定义了游戏中的物理碰撞分组,为2D物理引擎提供精确的碰撞检测规则。
碰撞分组体系
graph TB
subgraph "角色分组"
A[HERO - 英雄]
B[MONSTER - 怪物]
C[BOSS - BOSS]
D[PLAYER - 玩家]
end
subgraph "技能分组"
E[HERO_SKILL - 英雄技能]
F[MONSTER_SKILL - 怪物技能]
G[SKILL_TAG - 技能标记]
end
subgraph "范围分组"
H[ATK_RANGE - 攻击范围]
I[DEFAULT - 默认分组]
end
A --> E
B --> F
C --> F
D --> E
图表来源
配置参数详解
| 参数类别 | 参数名称 | 数值 | 用途 |
|---|---|---|---|
| 分组掩码 | DEFAULT | 1 | 默认碰撞分组 |
| 分组掩码 | MONSTER | 2 | 怪物专用分组 |
| 分组掩码 | HERO | 4 | 英雄专用分组 |
| 分组掩码 | MONSTER_SKILL | 8 | 怪物技能分组 |
| 分组掩码 | HERO_SKILL | 16 | 英雄技能分组 |
| 分组掩码 | PLAYER | 32 | 玩家区域分组 |
| 分组掩码 | BOSS | 64 | BOSS专用分组 |
| 地图边界 | LETF_END | -420 | 左边界坐标 |
| 地图边界 | RIGHT_END | 420 | 右边界坐标 |
| 地图边界 | HERO_START | -360 | 英雄起始位置 |
| 地图边界 | MONSTER_START | 360 | 怪物起始位置 |
| 攻击范围 | ATK_RANGE_X | 150 | 攻击距离X轴 |
| 移动范围 | MOVE_RANGE_X | 20 | 移动范围X轴 |
章节来源
怪物生成系统
RogueConfig.ts - 怪物类型与属性配置
RogueConfig.ts重构了怪物生成逻辑,支持多种怪物类型和差异化属性配置。
怪物类型枚举
export enum MonType {
NORMAL = 0, // 普通怪物
ELITE = 1, // 精英怪物
BOSS = 2 // BOSS怪物
}
章节来源
怪物属性倍率配置
不同类型的怪物具有不同的属性倍率,通过MonAttrSet配置:
graph LR
subgraph "属性倍率"
A[普通怪物] --> |HP_MAX:1.1| B[生命值+10%]
A --> |AP:1.05| C[攻击力+5%]
D[精英怪物] --> |HP_MAX:2| E[生命值+100%]
D --> |AP:1.1| F[攻击力+10%]
G[BOSS怪物] --> |HP_MAX:5| H[生命值+400%]
G --> |AP:2| I[攻击力+100%]
end
图表来源
属性计算函数
export const getMonAttr=(lv:number,uuid:number,MonType:MonType)=>{
let mon=HeroInfo[uuid]
let hp=mon.hp*lv*MonAttrSet[MonType].HP_MAX
let mp=mon.mp*lv*MonAttrSet[MonType].MP
let ap=mon.ap*lv*MonAttrSet[MonType].AP
let map=mon.map*lv*MonAttrSet[MonType].MAP
let def=mon.def*lv*MonAttrSet[MonType].DEF
let mdef=mon.mdef*lv*MonAttrSet[MonType].MDEF
return {hp:hp,mp:mp,ap:ap,map:map,def:def,mdef:mdef}
}
章节来源
MissionMonComp.ts - 关卡怪物生成
MissionMonComp负责根据关卡配置生成相应的怪物。
关卡配置生成逻辑
flowchart TD
A[开始生成怪物] --> B{是否为Boss关卡?}
B --> |是| C[添加Boss怪物]
B --> |否| D{是否为精英关卡?}
D --> |是| E[添加精英怪物]
D --> |否| F[添加普通怪物]
C --> G[减少普通怪物数量]
E --> H[减少普通怪物数量]
F --> I[按基础数量生成]
G --> J[生成额外怪物?]
H --> J
I --> J
J --> K[返回怪物配置数组]
图表来源
怪物生成流程
- 关卡类型判断:根据关卡编号判断是否为Boss或精英关卡
- 特殊怪物添加:Boss关卡添加Boss怪物,精英关卡添加精英怪物
- 普通怪物生成:根据剩余数量生成普通怪物
- 额外怪物:有一定概率生成额外怪物
章节来源
代码示例:获取关卡怪物配置
// 根据波次生成怪物配置
export function getStageMonConfigs(stage: number): IMonsConfig[] {
const monsterConfigs: IMonsConfig[] = [];
// 判断是否为Boss波次
const isBossStage = BossStage.includes(stage);
// 如果是Boss波次,增加一个Boss怪物
if (isBossStage) {
const bossUUID = BossMons[Math.floor(Math.random() * BossMons.length)] || 5201;
monsterConfigs.push({
uuid: bossUUID,
buff: [],
level: stage,
monType: MonType.BOSS
});
}
return monsterConfigs;
}
章节来源
系统集成与工作流程
整体工作流程
flowchart TD
A[Main.ts启动] --> B[Root初始化]
B --> C[SMC单例创建]
C --> D[Initialize初始化]
D --> E[AsyncQueue执行]
E --> F[资源加载]
F --> G[LoadingView显示]
G --> H[数据初始化]
H --> I[地图加载]
I --> J[游戏界面打开]
K[事件系统] --> L[GameEvent监听]
L --> M[业务逻辑处理]
N[存储系统] --> O[本地数据读取]
O --> P[云端数据同步]
Q[资源系统] --> R[异步加载队列]
R --> S[进度监控]
S --> T[资源释放]
U[怪物系统] --> V[RogueConfig配置]
V --> W[MissionMonComp生成]
W --> X[属性计算]
图表来源
数据流管理
系统采用单例模式管理全局状态,通过事件驱动实现模块间的松耦合通信。
章节来源
最佳实践与优化建议
初始化优化策略
- 并行加载:利用异步队列实现资源的并行加载
- 错误处理:对加载失败的资源进行优雅降级
- 进度反馈:提供详细的加载进度和状态提示
- 内存管理:及时释放不需要的资源
事件系统优化
- 命名规范:使用语义化的事件名称
- 监听管理:及时移除不需要的事件监听器
- 参数传递:合理设计事件参数结构
- 性能考虑:避免在高频事件中执行复杂操作
资源管理最佳实践
- 预加载策略:提前加载常用资源
- 按需加载:根据游戏进度动态加载资源
- 缓存管理:合理利用资源缓存机制
- 内存监控:定期检查和释放内存占用
存储系统安全
- 数据加密:在生产环境中启用数据加密
- 用户隔离:确保不同用户的存储数据相互独立
- 备份策略:建立数据备份和恢复机制
- 权限控制:限制对敏感数据的访问权限
怪物系统优化
- 类型区分:合理配置普通、精英、Boss怪物的比例
- 属性平衡:通过MonAttrSet调整不同类型怪物的属性倍率
- 关卡设计:结合关卡编号动态调整怪物配置
- 性能优化:批量生成怪物,减少频繁的资源加载
总结
本游戏的核心运行系统通过模块化设计实现了高度的可维护性和扩展性。初始化系统确保游戏启动的稳定性和效率,事件系统提供了灵活的模块间通信机制,资源管理系统支持复杂的资源加载和管理需求,本地存储系统保障了数据的安全性和持久性。
新增的怪物生成系统通过RogueConfig.ts和MissionMonComp.ts实现了程序化的怪物生成逻辑,支持普通、精英、BOSS三种怪物类型,并通过属性倍率配置实现了差异化的设计。系统采用的异步队列模式、事件驱动架构和单例管理模式,为游戏开发提供了坚实的基础框架。通过合理的配置和优化,这套系统能够支持大型游戏项目的开发需求,同时保持良好的性能表现和用户体验。