本篇為《美樂迪電玩全套系統搭建》系列的第三篇,聚焦大廳與子游戲的動態加載機制,深入解析 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 參數設定點擊行為
四、子游戲打包與熱更新配置
-
使用 Cocos Creator 將每個子游戲打成獨立的
bundle
-
在主工程設置:
項目設置 -> Asset Bundle -> 創建新Bundle -> 命名與子游戲路徑一致
-
將 bundle 打包并上傳至遠程服務器:
/shuiguomali/├── index.js├── config.json├── assets/
-
大廳熱更管理器會自動檢測對應
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 架構,美樂迪電玩的大廳實現了模塊化加載、按需接入、熱更新分發等多種場景的適配,為多子游戲平臺構建提供了高擴展性的基礎設施。下一篇我們將進入服務器層,逐步剖析游戲狀態同步與發卡查分模塊的完整實現。