美乐迪电玩大厅加载机制与 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 -> 命名与子游戏路径一致

  3. 将 bundle 打包并上传至远程服务器:

    /shuiguomali/
    ├── index.js
    ├── config.json
    ├── assets/

  4. 大厅热更管理器会自动检测对应 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 架构,美乐迪电玩的大厅实现了模块化加载、按需接入、热更新分发等多种场景的适配,为多子游戏平台构建提供了高扩展性的基础设施。下一篇我们将进入服务器层,逐步剖析游戏状态同步与发卡查分模块的完整实现。

相关推荐
软件黑马王子44 分钟前
2025Unity超详细《坦克大战3D》项目实战案例(上篇)——UI搭建并使用和数据持久化(附资源和源代码)
游戏·ui·unity·c#
lingzhilab44 分钟前
零知IDE——STM32F407VET6与ADS1115模数转换器实现多通道数据采集显示系统
stm32·单片机·开源
2501_916007478 小时前
HTTPS 抓包乱码怎么办?原因剖析、排查步骤与实战工具对策(HTTPS 抓包乱码、gzipbrotli、TLS 解密、iOS 抓包)
android·ios·小程序·https·uni-app·iphone·webview
小和尚同志9 小时前
使用 Certimate 实现自动续签 SSL 证书
开源·github·自动化运维
proud121211 小时前
开源的 CSS 动画库
前端·css·开源
ajassi200011 小时前
开源 C# 快速开发(三)复杂控件
开发语言·开源·c#
算家计算13 小时前
阿里最新开源Wan2.2-Animate-14B 本地部署教程:统一双模态框架,MoE架构赋能电影级角色动画与替换
人工智能·开源
2501_9160088914 小时前
HTTPS 双向认证抓包实战,原理、难点、工具与可操作的排查流程
网络协议·http·ios·小程序·https·uni-app·iphone
2501_9151063214 小时前
HTTPS 能抓包吗?实战答案与逐步可行方案(HTTPS 抓包原理、证书Pinning双向认证应对、工具对比)
网络协议·http·ios·小程序·https·uni-app·iphone
游戏开发爱好者814 小时前
App HTTPS 抓包实战,原理、常见问题与可行工具路线(开发 测试 安全 角度)
网络协议·安全·ios·小程序·https·uni-app·iphone