当前位置: 首页 > news >正文

美乐迪电玩大厅加载机制与 RoomList 配置结构分析

本篇为《美乐迪电玩全套系统搭建》系列的第三篇,聚焦大厅与子游戏的动态加载机制,深入解析 roomlist.json 的数据结构、解析流程、入口配置方式与自定义接入扩展技巧。通过本篇内容,开发者可实现自由控制子游戏接入与分发策略。


一、RoomList 的定位与作用

在美乐迪电玩项目中,大厅与子游戏采用模块解耦加载机制。核心逻辑由 roomlist.json 文件驱动,该文件定义了所有子游戏的资源路径、名称标识、加载逻辑、热更新地址等。

路径:

assets/resources/config/roomlist.json

二、RoomList.json 数据结构详解

以实际配置为例:

[{"id": 1001,"name": "水果玛丽","prefab": "ui/games/shuiguomali/prefab","bundle": "shuiguomali","icon": "icon_fruit","type": "slots","hot": true,"entry": true,"version": "1.0.3"},{"id": 1002,"name": "跳高高","prefab": "ui/games/tiaogaogao/prefab","bundle": "tiaogaogao","type": "arcade","hot": false,"entry": false,"version": "1.0.1"}
]

字段解释:

字段名含义说明
id游戏唯一编号,用于逻辑判断
name展示用游戏名称
prefab子游戏 UI 入口 Prefab 路径
bundle对应热更新资源包名称(即子游戏目录名)
icon显示在大厅的图标路径
type游戏类别标签(slots、arcade等)
hot是否在大厅显示“火爆”标识
entry是否显示在大厅首页
version当前子游戏版本号,用于热更新对比

三、大厅挂载流程源码解析

关键入口:HallGameLoader.ts

loadRoomList() {cc.resources.load("config/roomlist", cc.JsonAsset, (err, data) => {const list = data.json;list.forEach(item => {this.createGameEntry(item);});});
}createGameEntry(item) {cc.resources.load(item.icon, cc.SpriteFrame, (err, icon) => {const node = cc.instantiate(this.gameEntryPrefab);node.getComponent(GameEntry).init(item, icon);this.content.addChild(node);});
}

说明:

  • roomlist.json 加载所有子游戏条目

  • 动态实例化按钮节点,根据 JSON 参数设定点击行为


四、子游戏打包与热更新配置

  1. 使用 Cocos Creator 将每个子游戏打成独立的 bundle

  2. 在主工程设置:

项目设置 -> Asset Bundle -> 创建新Bundle -> 命名与子游戏路径一致
  1. 将 bundle 打包并上传至远程服务器:

/shuiguomali/├── index.js├── config.json├── assets/
  1. 大厅热更管理器会自动检测对应 bundle/version 进行更新处理


五、扩展:新增一个子游戏

假设你要新增一个叫“雷电战机”的小游戏:

1. 构建资源包

  • 将其项目以 bundle 形式构建,生成 leidianzhanji 目录

2. 上传远程服务器

  • 上传路径为:https://your.cdn.com/leidianzhanji/

3. 修改 roomlist.json

{"id": 1010,"name": "雷电战机","prefab": "ui/games/leidianzhanji/prefab","bundle": "leidianzhanji","icon": "icon_jet","type": "shoot","hot": true,"entry": true,"version": "1.0.0"
}

4. 更新大厅资源路径配置(可选)

若大厅已接入动态 CDN 拉取机制,请确保 CDN 路径在 remote_config.json 中也添加 leidianzhanji 节点。


六、调试技巧与注意事项

  • 所有 icon 路径必须存在,否则实例化失败会报错

  • 若 bundle 构建后无法热更新,请确认版本号变动

  • 子游戏 Prefab 与 icon 推荐统一命名规则,便于维护

  • 子游戏资源中不要引用主工程资源,避免依赖错乱


小结

通过 roomlist.json + 动态 bundle 架构,美乐迪电玩的大厅实现了模块化加载、按需接入、热更新分发等多种场景的适配,为多子游戏平台构建提供了高扩展性的基础设施。下一篇我们将进入服务器层,逐步剖析游戏状态同步与发卡查分模块的完整实现。

相关文章:

  • 给vue-admin-template菜单栏 sidebar-item 添加消息提示
  • WHAT - 静态资源缓存穿透
  • 蓝耘平台介绍:算力赋能AI创新的智算云平台
  • 深入探讨JavaScript性能瓶颈与优化实战指南
  • 【python】如何将文件夹及其子文件夹下的所有word文件汇总导出到一个excel文件里?
  • C++模板学习(进阶)
  • 火山引擎实时语音合成WebSocket V3协议Python实现demo
  • 自动化测试基础知识总结
  • Oracle在ERP市场击败SAP
  • 单元测试学习笔记(一)
  • 金融数据分析(Python)个人学习笔记(12):网络爬虫
  • Python列表赋值的终极指南:性能与方法的艺术
  • Kafka 消息积压监控和报警配置的详细步骤
  • Open GL ES -> 模版测试,绘制SurfaceView中某个目标区域
  • 2.Spring MVC与WebFlux响应式编程
  • Ubuntu与OpenHarmony OS 5.0显示系统架构比较
  • Trae国内版怎么用?Trae IDE 内置 MCP 市场配置使用指南
  • 软考软件设计师考试情况与大纲概述
  • 从零开始构建微博爬虫与数据分析系统
  • 蓝桥杯 19.合根植物
  • 涡虫首上太空,神舟二十号任务将开展3项生命科学实验
  • 降低血压可减少痴呆症发生风险
  • 洛阳白马寺内的狄仁杰墓挂上公示牌争论尘埃落定?瀍河区文旅局称已确认
  • 印尼塔劳群岛发生6.2级地震,震源深度140千米
  • 复旦大学附属中山医院也有儿科了,门诊将于下月底开业
  • 中越海警开展2025年第一次北部湾联合巡逻