二七王:补齐三处配置缺口(扣底按钮 / 出牌提示按钮槽位 / 三个 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:
@@ -43,7 +43,7 @@ const index = EQW_SpriteIndex.build(EQW_Sprites);
|
||||
const spriteVals = Object.keys(index).map(k => index[k]);
|
||||
// 钉住精确数量:松下界(如 >200)删掉整个 View 都还能通过。
|
||||
// 增删精灵时连同本数字一起改——有意的顺手更新,不是有意的就红给你看
|
||||
t.eq('精灵总数', spriteVals.length, 378);
|
||||
t.eq('精灵总数', spriteVals.length, 380);
|
||||
const spriteOk = spriteVals.every(v => v >= 1001 && v <= 2999);
|
||||
if (!spriteOk) { console.log('越界精灵: ' + JSON.stringify(spriteVals.filter(v => v < 1001 || v > 2999))); }
|
||||
t.eq('精灵落在 1001-2999', spriteOk, true);
|
||||
@@ -238,7 +238,7 @@ t.eq('全部布局节点可求解、矩形数与坐标都对', solveFailures, []
|
||||
|
||||
// 钉住节点总数:松下界(如 >40)删掉整个 View 都还能通过,任何意外的增删都要在这里可见。
|
||||
// 增删布局节点时,连同本数字一起改——改动是有意的就顺手更新,不是有意的就红给你看
|
||||
t.eq('布局节点总数', allNodes.length, 61);
|
||||
t.eq('布局节点总数', allNodes.length, 83);
|
||||
|
||||
// ---- 布局文件是纯数据:不含函数 ----
|
||||
const funcs = [];
|
||||
@@ -347,7 +347,9 @@ t.eq('NUM_STYLE 资源键存在且字段合法', numStyleProblems, []);
|
||||
['MAIN_SUIT_COUNT', 'MAIN_SUIT_COUNT'],
|
||||
['P_COUNTDOWN', 'COUNTDOWN'],
|
||||
['RESULT_SCORE_NUM', 'RESULT_WIN'],
|
||||
['RESULT_SCORE_NUM', 'RESULT_LOSE']
|
||||
['RESULT_SCORE_NUM', 'RESULT_LOSE'],
|
||||
['ACC_TPL_SCORE_NUM', 'RESULT_WIN'],
|
||||
['ACC_TPL_SCORE_NUM', 'RESULT_LOSE']
|
||||
].forEach(pair => {
|
||||
const node = EQW_Layout[pair[0]];
|
||||
const st = EQW_Layout.NUM_STYLE[pair[1]];
|
||||
|
||||
Reference in New Issue
Block a user