49 lines
5.2 KiB
Markdown
49 lines
5.2 KiB
Markdown
# 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 构建小游戏,验证首次下载、缓存后重进,以及普通门、旋转门、升降块、按钮和可移动地板的实际显示。本次尚未完成真机验证。
|