MatchMaster/docs/gameplay-atlas-loading.md

49 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# BlockBtnUI、door、down 远程加载
这三张 PNG 是图集,现在与方块图片共用 `BlockAssetManager`、`BLOCK_IMAGE_BASE_URL` 和远程 `version.json`。不另建 Bundle 或下载器。
## 上传
源文件已从 `assets/TextureBlock/block/` 移到 **`assets/Block/`**,避免继续包含在 TextureBlock 分包中。
将以下文件上传到现有方块图片目录,文件名区分大小写:
```text
https://cdn.pay.nika4games.com/remote/Block/BlockBtnUI.png
https://cdn.pay.nika4games.com/remote/Block/door.png
https://cdn.pay.nika4games.com/remote/Block/down.png
```
现在必须成对上传三个 **PNG 和同名 plist**(`BlockBtnUI.plist`、`door.plist`、`down.plist`)。`.meta` 不上传。远程目录继续保留已有方块 PNG 和 `version.json`。
本次需重新构建并发布客户端一次,以后使用 TexturePacker format 2 重新打包图集,可以改变图集画布、排列和旋转,无需再生成客户端坐标表。已有业务使用的小图名称和逻辑尺寸应保持兼容。新增图片不会自动增加游戏功能。
先上传完整的 PNG/plist 配对文件、刷新 CDN 缓存,**最后更新共享 version.json**。即使只修改 plist,也必须使用新版本号。本次检查时服务器为 `1.0.1`,工程的 `assets/Block/version.json` 已准备为 `1.0.2`。
PNG 和 plist 使用相同的 `?v=<version>` 参数与磁盘版本目录。CDN 缓存键应保留 v,version.json 应避免长缓存。版本只在冷启动时选择,更新后完全退出再启动游戏;当前会话不热切换驻留图集。覆盖原目录不保留历史版本,严格保持旧会话资源一致需服务端另行提供版本目录。
## 运行行为
- 每次进关先读取各图集的同版本 plist,再加载 PNG;三组全部就绪后才加载当前关方块。格式无效、坐标越界或 PNG 尺寸与 plist 不匹配会触发既有重试,不使用旧坐标表兜底。尺寸相同本身不能证明两份文件来自同一次导出,上传时仍须成对更新。
- 微信/抖音使用原有版本目录缓存、后台队列和失败重试。缓存命中时不重复下载;需要远程下载时使用已有 Loading 和重试提示。
- 后台清单为 371 张 PNG 加 3 份 plist,共 374 个文件。后台先缓存三组图集文件,再缓存普通方块;图集下载失败按原有机制重试。后台只保存文件,不解码纹理或解析 plist。前台小图按需创建,共享 PNG 纹理。
- 三张图集及其已创建的小图在 GameScene 下一关、重玩和场景重载时持续驻留,不重复释放或解码。普通方块仍按当前关需求管理内存。
- 监听场景实际切入事件,进入 HomeScene 时按平台决定图集驻留:Android 不做内存分档,保留;仅 iOS 使用 5000 MB 分界,低于阈值或读不到有效内存时释放,达到阈值时保留。5000 MB 是沿用项目的缓存策略阈值,不代表当前剩余可用内存。无法识别的平台默认释放。
- iOS 收到项目现有的内存告警后,本次启动改为首页释放策略;如果已经在首页则释放空闲图集,GameScene 中正在使用及正在准备进关的图片仍受保护。Android 不参与此图集降级策略,项目其他资源的内存告警处理保持不变。
- 预加载 HomeScene 不释放。返回首页会使未完成的进关请求失效,迟到的纹理按同一驻留策略处理。释放只影响内存,保留磁盘缓存;已保留的图集下次进关直接复用,不重复解码。
- 门、按钮、升降块、可移动地板改为通过图集名取图。预制体默认图片由 `RemoteAtlasBindings` 恢复,包括未激活的子节点;不会覆盖业务逻辑已经设置的图片。
`GameplayAtlasFrames.ts` 仅保存图集名称和布局转换/检查逻辑,不再包含固定裁剪坐标。运行时读取 Cocos 解析后的 plist,释放临时的 plist Asset,仅保留布局数据;布局与纹理一起驻留或释放。`door/turn_bg` 的左右 30 像素九宫格边距属于原编辑器 UI 设置,仍在客户端保留,标准 TexturePacker plist 不包含此设置。
## 验证
```powershell
node --test --test-name-pattern='remote atlases' tools/test-block-assets.cjs
```
测试需要 Node、TypeScript 和 Python 3(标准库 plistlib 独立读取真实 plist,避免依赖过期的 meta)。没有本地 TypeScript 时通过 TYPESCRIPT_PATH 指定 typescript/lib/typescript.js,Python 可执行文件可由 PYTHON 指定。13 项图集测试覆盖真实布局、版本更新后的新坐标与新增小图名、同版本 PNG/plist 和离线缓存、缺失/损坏描述文件、坐标越界、尺寸不匹配、优先加载及原有内存策略。另使用本机 Cocos Creator 2.4.15 的真实 XML parser 检查当前三份 plist,335 个小图布局通过检查。
专项测试不替代小游戏构建及真机显示验证。此次线上检查确认六个文件可访问,三组尺寸匹配,远程 plist 与当前本地一致;发布时仍需复查,线上内容可能随后更新。
图片已由维护方上传后,仍需重新从 Cocos 构建小游戏,验证首次下载、缓存后重进,以及普通门、旋转门、升降块、按钮和可移动地板的实际显示。本次尚未完成真机验证。