Oops Framework登录流程全解:Cocos Creator 3.x事件驱动的服务器连接与角色数据加载实战
【免费下载链接】oops-framework基于 Cocos Creator 3.x 版本开发的游戏框架,此项目为 Oops Framework 教程项目,如果使用框架制作游戏项目可下载 oops-game-kit 游戏项目模板开发。项目地址: https://gitcode.com/gh_mirrors/oo/oops-framework
Oops Framework是一个基于 Cocos Creator 3.x 开发的游戏框架,本教程项目带你完整看懂它的登录流程:如何通过事件驱动方式连接服务器、拉取角色数据并绑定到界面。全文以项目源码为蓝本,拆解「初始化 → 连接服务器 → 请求玩家数据 → 创建角色 → 登录成功」这条完整链路,帮助新手快速掌握 Cocos Creator 3.x 中事件驱动的服务器连接与角色数据加载实战写法。
🗺️ 登录流程全景:一张图看懂事件驱动链路
整个登录流程由 4 个关键节点串联,节点之间不互相调用,而是通过oops.message全局事件总线解耦:
Initialize 初始化→
GameServerConnected(服务器连接成功事件)→Account 请求玩家数据→Role 创建角色并绑定界面→LoginSuccess(登录成功事件)
这种"事件驱动 + ECS 组件"的设计,让账号模块、角色模块、界面模块各自独立,想替换网络库或增加断线重连,都不必改动其他模块。下面按执行顺序逐步拆解。
🚀 第一步:游戏初始化与资源加载
游戏入口是 Main.ts,它继承框架的Root类,负责初始化 UI 配置并挂载 ECS 系统:
- 注册初始化实体:Initialize.ts 中,初始化模块会创建Account 账号实体作为自己的子实体,并添加
InitResComp组件触发资源加载; - 资源加载:InitRes.ts 使用框架自带的
AsyncQueue异步队列,按顺序加载多语言包 → 加载公共目录资源 → 打开 Loading 界面,完成后移除自身组件; - Loading 界面:LoadingViewComp.ts 监听
LoginSuccess事件,收到后关闭 Loading 并打开游戏主界面UIID.Demo。
🔌 第二步:连接游戏服务器(事件驱动的关键)
账号模块入口是 Account.ts,它是一个 ECS 实体,挂载了两个组件:
- AccountModelComp.ts:账号数据层,保存货币等账号信息和角色对象引用;
- 事件监听:
init()中通过oops.message.on(GameEvent.GameServerConnected, ...)监听"服务器连接成功"事件。
connect()方法负责发起服务器连接。教程项目里为了支持无网状态测试,直接用oops.message.dispatchEvent(GameEvent.GameServerConnected)模拟连接成功——这就是事件驱动的核心:连接层只管发事件,后续流程全由监听者自动接管。事件名统一定义在 GameEvent.ts 中,方便全局检索。
📡 第三步:ECS 组件驱动的角色数据请求
收到GameServerConnected事件后,Account.onHandler调用getPlayer(),做法只有一个动作:给实体添加AccountNetDataComp组件。
真正的网络请求逻辑写在 AccountNetData.ts 的AccountNetDataSystem(ComblockSystem)中:
- 通过
filter()匹配"同时拥有AccountNetDataComp和AccountModelComp"的实体; entityEnter中定义onComplete回调,收到服务器返回的玩家数据后依次执行:setLocalStorage:用oops.storage.setUser(uid)保存用户标识,下次登录免输账号;createRole:创建并填充角色对象;- 派发
LoginSuccess事件通知全游戏登录完成。
教程项目里有一段离线测试代码,直接构造了模拟玩家数据(id/name/power/agile/lv/jobId)后调用回调——没有服务器也能跑通完整流程,非常适合新手阅读。
🎮 第四步:角色数据加载与界面绑定
createRole是登录流程的落点,它拿到全局单例角色实体 Role.ts 并填充数据:
role.RoleModel.id / name // 角色基础数据 role.RoleModelBase.power等 // 初始战斗属性(力量/敏捷/体质) role.upgrade(data.lv) // 等级数据(ECS System 处理升级逻辑) role.RoleModelJob.id // 职业数据关键在于MVVM 自动绑定:role.RoleModel.vmAdd()、role.RoleModelLevel.vmAdd()、role.RoleModelBase.vmAdd()三行代码就把数据变化绑定到界面显示,之后数据一变,UI 自动刷新,无需手动更新界面。最后role.load(oops.gui.game, v3(0, -300, 0))加载角色动画显示对象到场景。
🧩 事件如何闭环:LoginSuccess 之后的事情
LoginSuccess事件被 LoadingViewComp.ts 监听,收到后执行收尾工作:关闭 Loading 界面 → 打开游戏主界面(Demo),登录流程至此完整闭环。
📁 登录流程相关文件清单
| 环节 | 文件 | 职责 |
|---|---|---|
| 入口 | Main.ts | UI 配置初始化、ECS 系统挂载 |
| 初始化 | Initialize.ts | 创建 Account 实体、触发资源加载 |
| 资源加载 | InitRes.ts | 异步队列加载语言包与公共资源 |
| Loading | LoadingViewComp.ts | 监听 LoginSuccess、切换主界面 |
| 账号 | Account.ts | 连接服务器、监听连接成功事件 |
| 数据请求 | AccountNetData.ts | 请求玩家数据、创建角色 |
| 事件定义 | GameEvent.ts | 全局游戏事件枚举 |
| 角色 | Role.ts | 角色数据层/业务层/视图层 |
✅ 总结:这套登录流程值得你抄的设计
- 事件驱动解耦:
connect()不关心登录后续,只发GameServerConnected事件;后续全部由监听者接管,加断线重连只需多监听一个事件; - ECS 组件即任务:添加组件 = 派发任务,System 统一处理,逻辑可插拔;
- MVVM 自动绑定:
vmAdd()让数据到界面的同步零成本,角色升级、转职后 UI 自动刷新; - 离线可测试:模拟数据直接走通回调,无服务器也能开发界面。
如果你想体验完整流程,可以直接运行本教程项目,或克隆仓库后用 Cocos Creator 3.x 打开:
git clone https://gitcode.com/gh_mirrors/oo/oops-framework【免费下载链接】oops-framework基于 Cocos Creator 3.x 版本开发的游戏框架,此项目为 Oops Framework 教程项目,如果使用框架制作游戏项目可下载 oops-game-kit 游戏项目模板开发。项目地址: https://gitcode.com/gh_mirrors/oo/oops-framework
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考