Files
aetherbound-guild/docs/runtime/M52_UI_RESTORATION_MEMORY.md
T

69 lines
2.6 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.
# UI Restoration Memory
这份记录用于避免“每次看到一个问题再修一个问题”。任何按设计稿实现的
页面都必须遵守以下闭环。
## 失败根因
过去的重叠、出框和按钮不可读,主要来自四个错误:
1. 图片、文字和命中区各自使用独立坐标,没有共同的设计画布。
2. 生成素材没有记录内容安全框、固定边缘和可拉伸中心。
3. 空状态、选中态、禁用态共用一个布局,信息密度变化后发生重叠。
4. 自动化测试只验证节点和点击,没有验证真实截图中的像素关系。
## 实现前必须产出的契约
每个组件都要有一条记录:
```text
component_id
source_asset / intrinsic_size / alpha_policy
design_bounds / safe_content_bounds
text_slots / icon_slots / hit_rect
stretch_policy / nine_patch_margins / min_play_size
foreground_background_contrast
empty / selected / disabled / loading / error variants
```
没有这条记录,不能把素材接入页面。
## 实现顺序
```text
冻结设计稿
→ 测量画布和组件边界
→ 确认静态/运行时/命中区所有权
→ 先放静态素材
→ 再按 text_slots 放动态内容
→ 为每个状态建立独立布局
→ 检查最小/标准/宽屏截图
→ 通过后再迁移下一页
```
Market 的运行时文字槽位目前由
`runtime/ui/shared/m52_market_slots.gd` 集中维护。页面只读取这些归一化
槽位,不得在 `market_page_view.gd` 重新写同一组比例坐标;状态差异只能通过
`empty_*`、`selected_*` 等命名槽位表达。这样素材、文字和命中区才会共享同一
张 16:9 设计画布,后续页面迁移也能复用这条规则。
## 硬性验收
- 不允许纯文字按钮、重复边框、调试文案或烘焙价格。
- 文字必须完全位于自己的槽位;超长文本优先换行,不能压到相邻组件。
- 浅色材质使用深色墨水字,深色材质使用米白字;不能只凭“看起来差不多”。
- 背景可以 aspect-cover,设计画布必须保持固定比例;图标和人物保持比例。
- 每次视觉迭代必须保留 `static-only`、`dynamic-only`、`final-composite`
三种截图。
- 最小测试矩阵为 760×360、844×390、1280×720,中英文、空状态和选中态。
- 自动化通过不等于视觉通过;必须由 Agent 检查截图,Owner 再做最终确认。
## 出现问题时的修复顺序
```text
素材来源 → 比例/裁切 → 图层所有权 → 图层对齐 → 主体尺寸
→ 文字槽位 → 溢出/对比度 → 命中区
```
禁止跳过前面的边界,直接通过缩小字体、增加遮罩或叠加新面板来掩盖问题。