二七王:补齐三处配置缺口(扣底按钮 / 出牌提示按钮槽位 / 三个 View 的布局节点)

这三处都是「精灵或按钮已在清单里定案,但配置层缺东西」,不补的话 C/D/E 阶段
写渲染代码时会发现没有布局节点,极易就地硬编码坐标(违反零裸值红线)。

1) 底栏「扣底」按钮没有精灵(清单 §2.6 列了 5 个功能按钮,只登记了 4 个)
   - 新增 BTN_BURY_CARDS(1056) / BTN_BURY_CARDS_TEXT(1057),群组 205 号段内空闲号,
     资源沿用 BTN_BOTTOM_FUNC,与其余四个按钮同构。
   - FOOTER_FUNC_BUTTONS 的 items 由 4 项扩到 5 项,扣底紧邻底牌(照 §2.6 表序)。
     扣底宽 78 是【估值】:清单未给,取同为两字按钮的「底牌」实测值,已在配置与清单里注明。
   - 扣底看【埋牌底牌】(burycards)、底牌看【底牌】(bottomcards),两批不同的牌,
     JSDoc 里补了防写反的提示(对应验收清单第 13 条)。

2) 出牌阶段「提示」按钮有精灵、无布局槽位
   - PLAY_OPERATION_BAR.items 补上 PLAY_BTN_TIP,顺序照清单 §1.7 行文:倒计时 / 出牌 / 提示。
   - 宽 180 是【估值】:清单 §6.8 自身漏了该项;与埋牌条的提示按钮同资源 BTN_TIP
     (§3.3 实测 180×63),埋牌条 items 首项亦取 180,故沿用。
   - 顺带记下一处待裁定项:本条 itemHeight 为 55(对齐 BTN_PLAY 157×55),
     而 BTN_TIP 原生高 63,高度差待设计稿定。

3) AccountView / HistoryView / MingPaiView 一个布局节点都没有
   - AccountView(§6.9a 新增):外壳 6 个节点 + 玩家栏「容器 ACC_ROW_CONTAINER +
     行节点 ACC_ROW(itemHeight 即行高,行数由 ctx.count 给出)+ 行内模板贴附到行矩形」
     + 面板外 4 按钮,共 14 个节点。行内节点求出的是相对容器的坐标,可直接喂
     SpriteCopyUtils.create(与 §5.6a 冲关牌同一用法)。
   - HistoryView / MingPaiView(§6.9c 新增):遮罩 + 容器 + 每家一排牌(fan) + 座位标签,
     各 4 个节点。照 CHONGGUAN_FAN 同构、锚点沿用 §6.7 冲关牌的三家落点;
     差别只在张数上限——出牌历史摊平后可达 28 张以上,故 maxWidth 放宽到 500、
     spacingMin 收到 -96【估值】。MING_* 只有 LEFT/RIGHT 两个 bySeat 变体(明牌不看自己)。
   - 坐标来源:大局结算.png / 冲关牌型显示.png 目视实测,w/h 取资源尺寸;
     配置与清单里均已注明「目视实测估值,待设计稿复核」。
   - 运行时才确定的字段(动态文字宽高、随行浮动的 anchorY、数字精灵宽)一律
     runtime 显式声明。

钉死断言按实际重新数并更新:精灵总数 378 → 380,布局节点总数 61 → 83。
另把 ACC_TPL_SCORE_NUM 加进 NUM_STYLE 同源校验表(与 RESULT_SCORE_NUM 同一套资源)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-27 08:40:48 +08:00
co-authored by Claude Opus 5
parent f982460c9c
commit 8f36b61620
9 changed files with 311 additions and 44 deletions
@@ -278,9 +278,16 @@ EQW_Sprites.ChongGuanOverlayView = {
* route 是 room,真实取值路径是 data.deskfree.data.aset / .account(多一层 data 包装),
* 且 data.deskfree 可能缺失(开战后、首局发牌前解散)→ 前端必须容忍。
* 解散的申请/投票/同意拒绝界面【由平台全包】(Layer 420),子游戏不做投票界面。
* - 【无布局节点·待补】Layout_Result.js 目前只配了小局结算与冲关遮罩,本 View 的
* ACC_* 一个布局节点都没有——上图坐标是参考图目视实测,尚未落进 EQW_Layout。
* 实现前须先补齐布局配置,不得在渲染代码里就地硬编码坐标(零裸值红线)。
* - 【布局节点已补齐 · 2026-08-27】见 Layout_Result.js「大局总结算」一节:
* 外壳 —— ACC_PANEL_BG / ACC_TITLE_BAR / ACC_TITLE_TEXT / ACC_BTN_CLOSE /
* ACC_RULE_BAR / ACC_RULE_TEXT
* 玩家栏(精灵复制)—— ACC_ROW_CONTAINER(容器)+ ACC_ROW(行模板,itemHeight 即行高,
* 行数由 ctx.count 给出)+ ACC_TPL_RANK / ACC_TPL_AVATAR / ACC_ROW_TEXT_GRID /
* ACC_TPL_SCORE_NUM / ACC_TPL_DIVIDER(都 attach 到 ACC_ROW 的行矩形上)
* 按钮 —— ACC_FUNC_BUTTONS(面板外底部 4 个)
* ⚠ 行内各节点求出的是【相对 ACC_ROW_CONTAINER 的】坐标,可直接喂 SpriteCopyUtils.create。
* ⚠ 这些坐标是参考图【目视实测估值】(w/h 取资源尺寸),待设计稿复核;
* 但配置已成型,渲染代码一律引用节点,不得就地硬编码坐标(零裸值红线)。
*
* 资源说明:
* - 面板底: EQW_Images.PANEL_ACCOUNT (610), 1 帧, 1100×540, 圆角浅灰绿
@@ -390,8 +397,12 @@ EQW_Sprites.AccountView = {
* 一次性弹出、不是常驻入口;不阻塞出牌,若面板还开着就收到出牌推送,直接收起即可。
* - 【与 MingPaiView 的关系】版式相同、渲染逻辑可共用,但数据独立、图层不同
* (304 vs 305),故拆成两个 View——一个 View 恰好一个图层。
* - 【无布局节点·待补】Layout_*.js 里没有 HIST_* 布局节点;牌排可参照
* EQW_Layout.CHONGGUAN_FAN 的同构参数,实现前须补齐配置,不在渲染代码里硬编码坐标。
* - 【布局节点已补齐 · 2026-08-27】见 Layout_Result.js「出牌历史 / 上一轮 / 亮牌」一节:
* HIST_MASK(遮罩)/ HIST_BOX(三个容器同摆原点、铺满屏)/ HIST_FAN(每家一排牌,
* bySeat 三变体,锚点沿用 §6.7 冲关牌的 LEFT 260,120 · RIGHT 1035,120 · SELF 640,400)/
* HIST_LABEL(三家座位标签,w/h 运行时注入)。
* 与 CHONGGUAN_FAN 的差别只有张数上限:出牌历史摊平后可达 28 张以上,
* 故 maxWidth 放宽到 500、spacingMin 收到 -96【估值,待设计稿复核】。
*
* 资源说明:
* - 遮罩: EQW_Images.MASK_DIM (609), 1 帧, 纯色可拉伸(与冲关/明牌共用)
@@ -463,7 +474,10 @@ EQW_Sprites.HistoryView = {
* 关闭 / onDestroy 时必须 removeRange 清理。
* - 【为什么与 HistoryView 拆成两个 View】版式相同、渲染逻辑可共用,但两者数据独立、
* 图层不同(304 vs 305);本项目约定「一个 View 恰好一个图层」,故各自成 View。
* - 【无布局节点·待补】Layout_*.js 里没有 MING_* 布局节点,同 HistoryView 的说明。
* - 【布局节点已补齐 · 2026-08-27】见 Layout_Result.js「明牌面板」一节:
* MING_MASK / MING_BOX / MING_FAN / MING_LABEL,与 HIST_* 同构,差别只在【家数】——
* bySeat 只有 LEFT / RIGHT 两个变体(MING_BOX_A 落 LEFT 位、MING_BOX_B 落 RIGHT 位),
* 没有 SELF 那排。坐标同为目视实测估值,待设计稿复核。
*
* 资源说明:
* - 遮罩: EQW_Images.MASK_DIM (609), 1 帧, 纯色可拉伸(与冲关/出牌历史共用同一资源)