參考:
使用 AssetsManager 靈活定制微信小游戲的緩存策略
一、我們的目標
目標就是讓玩家快速進入游戲,然后根據游戲的進度加載相應的資源,並可對資源進行版本控制、本地緩存、熱更新。
如果美術改一張圖或者策划修改一個配置文件就要發布版本再審核,就比較麻煩了。
所以方法3是我們要實現的目標。
翻看Egret的教程,提供了RES版本控制和緩存資源來個教程。下面窩來試試能不能實現方法3。
二、先來說說RES版本控制
RES版本控制使用插件resplugin.ts,對資源的名稱進行規范化,增加版本號或校驗碼比對等功能。具體查看RES版本控制。
未使用RES版本控制的發布形式,資源原封不動的發布到微信小游戲項目的resource文件夾下。
使用RES版本控制后,圖片被加上了crc32碼,並通過version.json和VersionController.ts控制版本、校驗對比。
那么問題來了,資源放到遠程服務器,不放在主包中,才能實現熱更。所以目前是不能實現熱更的,但是官方的教程也只寫到了這里。
問題:
1. 修改VersionController的版本號currentVersion后,會進行本地緩存的清理。路徑是wx.env.USER_DATA_PATH + "/cache_crc32/assets"。
const dir = wx.env.USER_DATA_PATH + "/cache_crc32/assets"; fs.readdir({ dirPath: dir, success: (e) => { const result = this.getRemoveList(e.files); const length = result.length; for (let i = 0; i < length; ++i) { console.log("VersionMananger >> 刪除", dir + "/" + result[i]) fs.unlinkSync(dir + "/" + result[i]); } }, fail: (e) => { // console.log(e); } });
那么在微信項目中image.js緩存的路徑需要修改為file-util.js的最下方的配置文件
總結:只實現了版本控制,沒有實現熱更新。
三、再看看《使用 AssetsManager 靈活定制微信小游戲的緩存策略》
使用 AssetsManager 靈活定制微信小游戲的緩存策略
這個教程主要是2個點
1. 使用ResSplitPlugin將資源發布時放到外部文件夾,而不是放在主包中。這樣我們就可以將資源放到遠程服務器加載,實現熱更。
2. 使用 image.js 和 text.js等緩存加載的遠程服務器資源,避免重復加載。
未使用ResSplitPlugin發布時,資源原封不動得發布到了小游戲項目
使用ResSplitPlugin發布時,資源發布到了外部文件夾。這個外部資源文件夾可以放到遠程服務器進行加載。
官方教程已經在教程里說了,將這個外部資源文件夾搭建一個本地服務器來訪問。發布正式的時候,將訪問地址改為自己服務器地址即可。
修改Main.ts的
await RES.loadConfig("resource/default.res.json", "resource/");
為
await RES.loadConfig("default.res.json","http://localhost:5000/resource/");
問題:
1. 這個做法沒有實現版本管理。需要額外一步操作。這個外部資源文件夾放到遠程服務器上時,使用ResDepot進行添加crc碼發布。當有圖片或配置修改時,再使用ResDepot發布上傳一次即可。
2. 每次版本更新需要手動調用file_util.js的remove來清理本地緩存,防止超過微信50M限制。
3. 發布時微信小游戲項目的js下總缺少兩個文件:default.thm.js、game.js。 這兩個文件被生成到了外部資源文件夾里了,需要自己復制到微信小游戲項目下。
4. 直接編譯這個插件是不生效的,需要使用命令發布:egret publish --target wxgame。(終端選項在Egret Wing IDE 正下方菜單欄第4個,調試和輸出選項旁邊)
總結:實現了熱更新和本地緩存、版本控制。但是版本控制不如插件resplugin.ts方便、自動化。
四、將resplugin和ResSplitPlugin兩個插件結合使用,實現熱更、本地緩存、版本控制
1. 按照2和3步驟使用兩個插件
2. 項目主要分為微信主包preload.res.json和遠程資源包default.res.json
3. 修改config.wxgame.ts
修改資源發布配置,resource下的主包和遠程包資源分開
找到項目目錄下scripts/config.wxgame.ts,修改資源分離配置 (根據你自身需求,來配置,配置表中的資源會發布到wxgame_remote下,不會被發布微信小游戲項目下)
4. 修改ResPlugin
找到項目scripts/resplugin.ts,設置需要版本控制的文件夾和文件類型
versionPath:你的資源控制的文件夾
versioConfigPath:你的版本控制文件
在設置版本控制的文件類型,例如龍骨的".dbbin"官方沒有寫。
下圖中增加一個 file.extname === ".dbbin"
5. 修改VersionMananger
項目src/VersionMananger.ts,修改版本控制類的配置。
6. 修改file-util.js
找到微信小游戲項目library/file-util.js,修改
這里的配置,對應於VersionMananger.ts中的存儲路徑。就是將http://192.168.16.24:8010/resource/assets/main路徑下載的文件,保存在手機cache_crc2/assets文件夾下。