From b81e800f22075e67b6b8522026435d8d5941e9d5 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Wed, 26 Aug 2026 23:30:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E4=B8=83=E7=8E=8B=EF=BC=9A=E9=80=89?= =?UTF-8?q?=E4=B8=BB=E9=9D=A2=E6=9D=BF=E6=8C=89=E7=BE=8E=E6=9C=AF=E5=AE=9E?= =?UTF-8?q?=E9=99=85=E5=87=BA=E5=9B=BE=E6=96=B9=E5=BC=8F=EF=BC=88=E4=B8=80?= =?UTF-8?q?=E5=BC=A0=E5=9B=BE5=E5=B8=A7=EF=BC=89=E9=87=8D=E5=81=9A?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E4=B8=8E=E7=B2=BE=E7=81=B5=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BTN_SUIT_CHOOSE 改为 5 帧(4 花色按钮各含底+图标+角标底、帧5=投降按钮含底+文字), 删除独立的 SUIT_ICON_L(512)/BTN_SURRENDER(534)/花色图标精灵/角标底精灵/投降文字精灵; 花色张数从单个文字精灵改为图片数字精灵(十位+个位),新增资源 NUM_MAIN_SUIT_COUNT(636)。 同步规格清单文档与两个测试文件里被钉死的精灵总数(387→382)。 Co-Authored-By: Claude Opus 5 (1M context) --- .../01_SubGame/codes/config/ImageResources.js | 28 ++++++------ .../01_SubGame/codes/config/Layout_Action.js | 18 ++++---- .../01_SubGame/codes/config/Sprites_Action.js | 44 +++++++++---------- client/tests/test_constants.js | 2 +- client/tests/test_spriteindex.js | 2 +- docs_dev/二七王-UI资源与精灵清单.md | 44 ++++++++++--------- 6 files changed, 70 insertions(+), 68 deletions(-) diff --git a/client/js/01_SubGame/codes/config/ImageResources.js b/client/js/01_SubGame/codes/config/ImageResources.js index 8ccbb08..2a1949a 100644 --- a/client/js/01_SubGame/codes/config/ImageResources.js +++ b/client/js/01_SubGame/codes/config/ImageResources.js @@ -7,6 +7,8 @@ // 按钮类资源一律只出 1 帧普通态,按下缩放/透明反馈由框架统一处理。 // // 以下键号在源清单中被显式判定「不需要」,本文件不占用,留空号以便追溯: +// 512 SUIT_ICON_L —— 选主面板花色图标已并入 BTN_SUIT_CHOOSE 帧1–4(美术改一张图出,2026-08-26) +// 534 BTN_SURRENDER —— 投降按钮已并入 BTN_SUIT_CHOOSE 帧5(美术改一张图出,2026-08-26) // 539 BTN_READY —— 准备标识用平台自带的(清单 §0.2) // 652 TXT_BAOZHU —— 报无主不做全场提示(D-4),只让他家 主N/对N 角标出现 // 655 PANEL_BOTTOM_3S —— 底牌 3 秒展示复用庄家翻底牌 UI(D-2),仅可见范围不同 @@ -45,12 +47,6 @@ var EQW_Images = EQW_Images || { //尺寸:30×30 SUIT_ICON_S: 511, - //用途:选主面板花色按钮上的花色图标 - //帧数:4 - //帧说明:帧1=方块♦ 帧2=梅花♣ 帧3=红心♥ 帧4=黑桃♠(按服务端 flower 编号 1–4 排序,同 SUIT_ICON_S) - //尺寸:46×46 - SUIT_ICON_L: 512, - //===================== §3.3 按钮 ===================== //用途:叫分档位按钮底 + 右上角角标底(同一张图,不含文字) @@ -66,18 +62,14 @@ var EQW_Images = EQW_Images || { //尺寸:184×57 BTN_NO_CALL: 532, - //用途:选主花色按钮底 - //帧数:1 - //帧说明:金黄底 + //用途:选主 / 投降面板按钮(花色按钮 + 投降按钮,一张图 5 帧) + //帧数:5 + //帧说明:帧1–4=四个花色按钮,每帧已包含「按钮底 + 花色图标 + 右上角蓝色角标底」, + // 花色序按服务端 flower 编号——帧1=方块♦ 帧2=梅花♣ 帧3=红心♥ 帧4=黑桃♠; + // 帧5=投降按钮,已包含「按钮底 + 投降二字」 //尺寸:128×55 BTN_SUIT_CHOOSE: 533, - //用途:「投降」按钮 - //帧数:1 - //帧说明:金黄底 - //尺寸:128×55 - BTN_SURRENDER: 534, - //用途:「提示」按钮 //帧数:1 //帧说明:蓝色渐变 @@ -319,6 +311,12 @@ var EQW_Images = EQW_Images || { //尺寸:30×40 NUM_CALL_SCORE: 635, + //用途:选主面板花色张数数字(美术单独出图,字号配色与以上几套不同;十位/个位各占一个精灵,见 Sprites_Action.js) + //帧数:10 + //帧说明:帧1–10 = 0–9 + //尺寸:24×32(估值,与选主按钮 128×55 协调估算,出图前须与最终设计稿核对) + NUM_MAIN_SUIT_COUNT: 636, + //===================== §3.7 浮层与气泡 ===================== //用途:「踩」/「没分」/「有分」提示气泡 diff --git a/client/js/01_SubGame/codes/config/Layout_Action.js b/client/js/01_SubGame/codes/config/Layout_Action.js index c27562d..44555d9 100644 --- a/client/js/01_SubGame/codes/config/Layout_Action.js +++ b/client/js/01_SubGame/codes/config/Layout_Action.js @@ -49,20 +49,20 @@ EQW_Layout.MAIN_SUIT_LINE = { itemWidth: 128, itemHeight: 55, spacing: 9, anchor: 'left' }; -//花色图标:贴对应花色按钮左侧(资源 SUIT_ICON_L 46×46)。target 由调用方按花色序号注入 -EQW_Layout.MAIN_SUIT_ICON = { - kind: 'attach', targetKind: 'sprite', hAlign: 'left', vAlign: 'middle', offsetX: 14, w: 46, h: 46, +//张数数字(十位):贴对应花色按钮下方偏左,资源 NUM_MAIN_SUIT_COUNT 24×32(十位为 0 时该精灵隐藏,调用方注入 target) +EQW_Layout.MAIN_SUIT_COUNT_TENS = { + kind: 'attach', targetKind: 'sprite', hAlign: 'center', vAlign: 'bottom', offsetX: -12, offsetY: -6, w: 24, h: 32, runtime: ['target'] }; -//张数大字:贴对应花色按钮居中,纯文字,清单未给宽高(调用方注入 target) -EQW_Layout.MAIN_SUIT_COUNT_TEXT = { - kind: 'attach', targetKind: 'sprite', hAlign: 'center', vAlign: 'middle', offsetX: 14, - runtime: ['target', 'w', 'h'] +//张数数字(个位):贴对应花色按钮下方偏右,紧邻十位,资源 NUM_MAIN_SUIT_COUNT 24×32(调用方注入 target) +EQW_Layout.MAIN_SUIT_COUNT_ONES = { + kind: 'attach', targetKind: 'sprite', hAlign: 'center', vAlign: 'bottom', offsetX: 12, offsetY: -6, w: 24, h: 32, + runtime: ['target'] }; -//对数角标底:贴对应花色按钮右上角(资源 BADGE_MULTIPLE 帧1 34×18)。 -//角标文字复用同一矩形,不单独配置(调用方注入 target) +//对数角标文字:贴对应花色按钮右上角(按钮帧内已含角标底,本节点只定位叠加的文字)。 +//清单未给宽高(调用方注入 target) EQW_Layout.MAIN_SUIT_PAIR_BADGE = { kind: 'attach', targetKind: 'sprite', corner: 'topRight', offsetX: -36, offsetY: 2, w: 34, h: 18, runtime: ['target'] diff --git a/client/js/01_SubGame/codes/config/Sprites_Action.js b/client/js/01_SubGame/codes/config/Sprites_Action.js index 22977e8..4fe344f 100644 --- a/client/js/01_SubGame/codes/config/Sprites_Action.js +++ b/client/js/01_SubGame/codes/config/Sprites_Action.js @@ -74,6 +74,13 @@ EQW_Sprites.CallPanelView = { }; //选主/投降面板:4 花色按钮 + 投降按钮(清单 §5.4,Layer 104 群组 221) +// +//以下键号在源清单中被显式判定「不需要」,本文件不占用,留空号以便追溯(美术改一张图 5 帧出图, +//花色图标与右上角角标底已并入 BTN_SUIT_CHOOSE 各帧,2026-08-26): +// 1656–1659 MAIN_SUIT_ICON_1..4 —— 花色图标并入 BTN_SUIT_CHOOSE 帧1–4 +// 1660–1663 MAIN_SUIT_COUNT_1..4 —— 原文字精灵,改为下方 8 个数字图片精灵(张数最多两位) +// 1664–1667 MAIN_SUIT_PAIR_BG_1..4 —— 角标底并入 BTN_SUIT_CHOOSE 帧1–4 +// 1673 MAIN_BTN_SURRENDER_TEXT —— 「投降」二字并入 BTN_SUIT_CHOOSE 帧5 EQW_Sprites.ChooseMainView = { Layer: EQW_Layers.ACTION, //104 @@ -83,38 +90,31 @@ EQW_Sprites.ChooseMainView = { MAIN_TITLE_BG: 1650, //图片:「亮主」斜角条,资源 EQW_Images.BAR_CHOOSE_MAIN MAIN_TITLE_TEXT: 1651, //文字:「亮主」 - //—— 4 个花色按钮底,资源 EQW_Images.BTN_SUIT_CHOOSE —— + //—— 4 个花色按钮,资源 EQW_Images.BTN_SUIT_CHOOSE,帧 = 花色序号 1–4(服务端 flower 编号), + // 该帧已含「按钮底 + 花色图标 + 右上角蓝色角标底」—— MAIN_SUIT_BTN_1: 1652, MAIN_SUIT_BTN_2: 1653, MAIN_SUIT_BTN_3: 1654, MAIN_SUIT_BTN_4: 1655, - //—— 4 个花色图标,资源 EQW_Images.SUIT_ICON_L,帧固定 = 位置序号(1方块 2梅花 3红心 4黑桃,与 TOP_SUIT_ICON 花色序一致) —— - MAIN_SUIT_ICON_1: 1656, - MAIN_SUIT_ICON_2: 1657, - MAIN_SUIT_ICON_3: 1658, - MAIN_SUIT_ICON_4: 1659, - - //—— 4 个花色张数文字:该花色在庄家手中的张数 —— - MAIN_SUIT_COUNT_1: 1660, - MAIN_SUIT_COUNT_2: 1661, - MAIN_SUIT_COUNT_3: 1662, - MAIN_SUIT_COUNT_4: 1663, - - //—— 4 个对数角标底,资源 EQW_Images.BADGE_MULTIPLE 帧1(蓝底) —— - MAIN_SUIT_PAIR_BG_1: 1664, - MAIN_SUIT_PAIR_BG_2: 1665, - MAIN_SUIT_PAIR_BG_3: 1666, - MAIN_SUIT_PAIR_BG_4: 1667, - - //—— 4 个对数角标文字:「N对」—— + //—— 4 个对数角标文字:「N对」,叠在对应花色按钮的角标底之上 —— MAIN_SUIT_PAIR_TEXT_1: 1668, MAIN_SUIT_PAIR_TEXT_2: 1669, MAIN_SUIT_PAIR_TEXT_3: 1670, MAIN_SUIT_PAIR_TEXT_4: 1671, - MAIN_BTN_SURRENDER: 1672, //图片:「投降」按钮,资源 EQW_Images.BTN_SURRENDER - MAIN_BTN_SURRENDER_TEXT: 1673 //文字:按钮文案「投降」 + //—— 8 个花色张数数字图片精灵:该花色在庄家手中的张数(两副牌单花色最多 26 张,两位数), + // 资源 EQW_Images.NUM_MAIN_SUIT_COUNT,帧 = 数字+1(帧1–10=0–9),十位为 0 时该精灵隐藏、个位始终显示 —— + MAIN_SUIT_COUNT_1_TENS: 1674, + MAIN_SUIT_COUNT_1_ONES: 1675, + MAIN_SUIT_COUNT_2_TENS: 1676, + MAIN_SUIT_COUNT_2_ONES: 1677, + MAIN_SUIT_COUNT_3_TENS: 1678, + MAIN_SUIT_COUNT_3_ONES: 1679, + MAIN_SUIT_COUNT_4_TENS: 1680, + MAIN_SUIT_COUNT_4_ONES: 1681, + + MAIN_BTN_SURRENDER: 1672 //图片:「投降」按钮,资源 EQW_Images.BTN_SUIT_CHOOSE 帧5(已含底与「投降」字) } }; diff --git a/client/tests/test_constants.js b/client/tests/test_constants.js index c206f95..358bfc8 100644 --- a/client/tests/test_constants.js +++ b/client/tests/test_constants.js @@ -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, 387); +t.eq('精灵总数', spriteVals.length, 382); 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); diff --git a/client/tests/test_spriteindex.js b/client/tests/test_spriteindex.js index 51e624a..408daf7 100644 --- a/client/tests/test_spriteindex.js +++ b/client/tests/test_spriteindex.js @@ -83,6 +83,6 @@ let realIndex = {}; try { realIndex = EQW_SpriteIndex.build(EQW_Sprites); } catch (e) { realOk = false; console.log('建索引失败: ' + e.message); } t.eq('真实精灵常量无重复键', realOk, true); // 钉住精确数量(与 test_constants.js 同一个数):松下界删掉整个 View 都还能通过 -t.eq('真实精灵数量', Object.keys(realIndex).length, 387); +t.eq('真实精灵数量', Object.keys(realIndex).length, 382); process.exit(t.done('spriteindex') ? 0 : 1); diff --git a/docs_dev/二七王-UI资源与精灵清单.md b/docs_dev/二七王-UI资源与精灵清单.md index 83c9855..df6ce9f 100644 --- a/docs_dev/二七王-UI资源与精灵清单.md +++ b/docs_dev/二七王-UI资源与精灵清单.md @@ -579,12 +579,14 @@ EQW_RoomOptions = { **选主面板规格**(群组 221,号段 1650–1699): +> **2026-08-26 修订**:美术侧实际出图方式与原规格不符——花色按钮改为**一张图 5 帧**(帧1–4=四花色按钮,每帧已含按钮底+花色图标+右上角蓝色角标底;帧5=投降按钮,已含按钮底+「投降」字),花色图标、角标底、投降文字不再单独出精灵。按此改写以下条目,代码同步见 `ImageResources.js`/`Sprites_Action.js`/`Layout_Action.js`。 + - 标题斜角条:`亮主` 金色字 + 倒计时数字。 -- **4 个花色按钮**,每个含 4 个精灵:按钮底 + 花色大图标 + **中央大数字** + **右上角蓝色角标**。 - - 中央大数字 = 该花色在庄家 36 张手牌中的**总张数** - - 右上角标 = 该花色的**对子数**(design §4/§11 明确要求) - - **两个数字都由前端据 `MyCards`/`cards` 自行统计**,协议 §「ChooseMain」明确「服务端不额外下发」。 -- **投降按钮**:仅 `touxiang === 1`(即叫分 70)时显示,与 4 个花色按钮并列。 +- **4 个花色按钮**:每个按钮由**一个精灵**呈现,帧 = 花色序号 1–4(服务端 flower 编号),该帧已含「按钮底 + 花色图标 + 右上角蓝色角标底」;角标底之上叠加一个**对数文字精灵**(`N对`)。 + - 按钮下方叠加**张数数字图片精灵**:该花色在庄家手中的**总张数**——两副牌单花色最多 26 张(两位数),故每个花色用**十位 + 个位两个数字图片精灵**(十位为 0 时隐藏),资源见 §3.6 新增的 `NUM_MAIN_SUIT_COUNT` + - 右上角标文字 = 该花色的**对子数**(design §4/§11 明确要求) + - **张数与对子数都由前端据 `MyCards`/`cards` 自行统计**,协议 §「ChooseMain」明确「服务端不额外下发」。 +- **投降按钮**:仅 `touxiang === 1`(即叫分 70)时显示,与 4 个花色按钮并列;按钮为**一个精灵**(`BTN_SUIT_CHOOSE` 帧5,已含底与「投降」字),不再单独出文字精灵。 - 交互:点花色 → `xuanzhu { seat, flower }`(flower:1方块 2梅花 3红心 4黑桃);点投降 → `touxiang { seat }`。 - **投降的后果**:直接跳到结算(§1.8),**不选主、不埋牌、不出牌**。 @@ -1106,7 +1108,7 @@ y≈648–720 深色条。左侧头像/昵称/分数由平台渲染(§0.2) | ID | 键名 | 用途 | 帧数 | 帧说明 | 尺寸 | | --- | --- | --- | --- | --- | --- | | 511 | `SUIT_ICON_S` | 顶部信息条 `主` 列 | 4 | 帧1=方块♦ 帧2=梅花♣ 帧3=红心♥ 帧4=黑桃♠(**按服务端 flower 编号 1–4 排序**) | 30 × 30 | -| 512 | `SUIT_ICON_L` | 选主面板花色按钮 | 4 | 同上排序 | 46 × 46 | +| ~~512~~ | ~~`SUIT_ICON_L`~~ | **不需要**:选主面板花色图标已并入 `BTN_SUIT_CHOOSE` 帧1–4(2026-08-26,美术改一张图 5 帧出图) | —— | —— | —— | > ⚠️ 花色图标的帧序按**服务端 flower 编号**(1方块 2梅花 3红心 4黑桃),与牌面资源的花色顺序**不同**。两者互不换算,各自独立。 @@ -1116,8 +1118,8 @@ y≈648–720 深色条。左侧头像/昵称/分数由平台渲染(§0.2) | --- | --- | --- | --- | --- | --- | | 531 | `BTN_CALL_SCORE` | 叫分档位按钮底 **+ 右上角角标底(同一张图,不含文字)** | **4** | 帧1=浅黄+蓝角标(70/65/60/55) 帧2=金黄+绿角标(50/45/40) 帧3=橙+深橙角标(35…5) 帧4=**灰**(已叫过/不可选)。**颜色按档位位置固定,只因不可叫变灰** | 74 × 56 | | 532 | `BTN_NO_CALL` | `不叫` | 1 | 蓝色渐变 | 184 × 57 | -| 533 | `BTN_SUIT_CHOOSE` | 选主花色按钮底 | 1 | 金黄底 | 128 × 55 | -| 534 | `BTN_SURRENDER` | `投降` | 1 | 金黄底 | 128 × 55 | +| 533 | `BTN_SUIT_CHOOSE` | **选主 / 投降面板按钮**(花色按钮 + 投降按钮,一张图 5 帧) | **5** | **帧1–4=四花色按钮,每帧已含「按钮底 + 花色图标 + 右上角蓝色角标底」,花色序按服务端 flower 编号(帧1=方块♦ 帧2=梅花♣ 帧3=红心♥ 帧4=黑桃♠);帧5=投降按钮,已含「按钮底 + 投降二字」**(2026-08-26 修订:原为按钮底单帧,花色图标/角标底/投降文字各自单独出精灵;美术侧实际按一张图 5 帧出图,改按此表) | 128 × 55 | +| ~~534~~ | ~~`BTN_SURRENDER`~~ | **不需要**:投降按钮已并入 `BTN_SUIT_CHOOSE` 帧5(2026-08-26) | —— | —— | —— | | 535 | `BTN_TIP` | `提示` | 1 | 蓝色渐变 | 180 × 63 | | 536 | `BTN_BURY` | `埋牌 (N/8)` | 2 | 帧1=可提交(金黄) 帧2=置灰(未满 8 张) | 180 × 63 | | 537 | `BTN_PLAY` | `出牌` | 2 | 帧1=可出 帧2=置灰 | 157 × 55 | @@ -1173,9 +1175,11 @@ y≈648–720 深色条。左侧头像/昵称/分数由平台渲染(§0.2) | 632 | `NUM_RESULT_WIN` | 结算得分数字(赢,橙) | 12 | 帧1–10 = 0–9,帧11 = `+`,帧12 = `-` | 46 × 62 | | 633 | `NUM_RESULT_LOSE` | 结算得分数字(输,蓝) | 12 | 同上 | 46 × 62 | | 634 | `ANI_JUDGE` | **判定结果动画**(大光 / 小光 / 过庄 / 升N级 / 投降)——帧动画资源,播放参数进 `AnimationConfigs`【待设计 D-8】 | 待定 | 待定 | 待定 | +| 636 | `NUM_MAIN_SUIT_COUNT` | **选主面板花色张数数字**(美术单独出图,字号配色与以上几套不同;十位/个位各占一个精灵) | 10 | 帧1–10 = 0–9 | 24 × 32(估值) | -> **带描边/渐变的美术字用图片多帧精灵**(倒计时、结算得分、叫分分数),文字精灵做不出这种效果——631–635 都要出图。 +> **带描边/渐变的美术字用图片多帧精灵**(倒计时、结算得分、叫分分数、选主张数),文字精灵做不出这种效果——631–636 都要出图。 > **纯数据型小字用文字精灵**(`SpriteManager.setText`):叫分角标的子数(值域 2–15,随爬坡开关变)、`主N`/`对N` 角标、局数、亮牌统计等。 +> **2026-08-26 新增 636**:选主张数原计划走文字精灵,但美术侧单独出了一套数字图(字号配色不同于既有几套),且张数最多两位(两副牌单花色最多 26 张),故改为图片数字精灵、十位个位各一个。 ### 3.7 浮层与气泡 @@ -1308,15 +1312,13 @@ design 与协议均**未定义任何音效**。以下是按牌类游戏常规推 | | 1631–1644 | `CALL_BTN_BADGE_1..14` | **文字** ×14 | 该档 `multiple` 子数(`2子`…`15子`),随爬坡开关变 | —— | | | 1645 | `CALL_BTN_NONE` | 图片 | `不叫` | `BTN_NO_CALL` | | | 1646 | `CALL_BTN_NONE_TEXT` | 文字 | —— | —— | -| **221** 选主面板 | 1650 | `MAIN_TITLE_BG` | 图片 | `亮主` 斜角条 | `BAR_CHOOSE_MAIN` | +| **221** 选主面板(2026-08-26 修订:美术改一张图 5 帧出图,花色图标/角标底/投降文字并入按钮帧,见 §1.5/§3.3) | 1650 | `MAIN_TITLE_BG` | 图片 | `亮主` 斜角条 | `BAR_CHOOSE_MAIN` | | | 1651 | `MAIN_TITLE_TEXT` | 文字 | `亮主` | —— | -| | 1652–1655 | `MAIN_SUIT_BTN_1..4` | 图片 ×4 | 花色按钮底 | `BTN_SUIT_CHOOSE` | -| | 1656–1659 | `MAIN_SUIT_ICON_1..4` | 图片 ×4 | 花色图标 | `SUIT_ICON_L` 帧1–4 | -| | 1660–1663 | `MAIN_SUIT_COUNT_1..4` | 文字 ×4 | 该花色在庄家手中的**张数** | —— | -| | 1664–1667 | `MAIN_SUIT_PAIR_BG_1..4` | 图片 ×4 | 对数角标底 | `BADGE_MULTIPLE` 帧1 | -| | 1668–1671 | `MAIN_SUIT_PAIR_TEXT_1..4` | 文字 ×4 | `N对` | —— | -| | 1672 | `MAIN_BTN_SURRENDER` | 图片 | `投降` | `BTN_SURRENDER` | -| | 1673 | `MAIN_BTN_SURRENDER_TEXT` | 文字 | —— | —— | +| | 1652–1655 | `MAIN_SUIT_BTN_1..4` | 图片 ×4 | 花色按钮(**已含按钮底+花色图标+角标底**),帧=花色序1–4 | `BTN_SUIT_CHOOSE` 帧1–4 | +| | 1668–1671 | `MAIN_SUIT_PAIR_TEXT_1..4` | 文字 ×4 | `N对`,叠在对应按钮角标底之上 | —— | +| | 1674–1681 | `MAIN_SUIT_COUNT_1..4_TENS/ONES` | **图片(数字精灵)** ×8 | 该花色在庄家手中的**张数**(两位数,十位/个位各一个精灵,十位为 0 隐藏) | `NUM_MAIN_SUIT_COUNT` | +| | 1672 | `MAIN_BTN_SURRENDER` | 图片 | `投降`(**已含按钮底+文字**) | `BTN_SUIT_CHOOSE` 帧5 | +| | ~~1656–1659 / 1660–1663 / 1664–1667 / 1673~~ | ~~`MAIN_SUIT_ICON_1..4` / 原 `MAIN_SUIT_COUNT_1..4` / `MAIN_SUIT_PAIR_BG_1..4` / `MAIN_BTN_SURRENDER_TEXT`~~ | —— | **不需要**:分别并入按钮帧或改为上方 8 个数字精灵,空出的 ID 不复用 | —— | | **222** 埋牌操作条 | 1700 | `BURY_BTN_TIP` | 图片 | `提示` | `BTN_TIP` | | | 1701 | `BURY_BTN_TIP_TEXT` | 文字 | —— | —— | | | 1702 | `BURY_BTN_SUBMIT` | 图片 | `埋牌` | `BTN_BURY` 帧1可提交/帧2灰 | @@ -1699,6 +1701,8 @@ CARD_SIZE: { ### 6.8 阶段操作区配置 +> **2026-08-26 修订**:选主面板花色图标、对数角标底已并入按钮帧(见 §1.5/§3.3),对应布局节点删除;花色张数改为十位/个位两个数字精灵,布局节点相应改写。 + | 部件 | kind | 参数(实测估值) | | --- | --- | --- | | 叫分 · 面板底 | `point` | `x:355 y:140 w:575 h:170` | @@ -1710,9 +1714,9 @@ CARD_SIZE: { | 叫分 · 自己叫分大字 | `point` | `x:570 y:320 w:140 h:70`,`textStyle{fontSize:52, align:center}` | | 选主 · 标题斜角条 | `point` | `x:330 y:315 w:425 h:50` | | **选主 · 4 花色 + 投降** | `line` | `direction:horizontal anchorX:330 anchorY:373 itemWidth:128 itemHeight:55 spacing:9 anchor:left`(共 5 项;投降不显示时只排 4 项,`anchor:left` 保证前 4 个位置不变) | -| 选主 · 花色图标 | `attach` | `target:对应花色按钮, hAlign:left, vAlign:middle, offsetX:14` | -| 选主 · 张数大字 | `attach` | `target:对应花色按钮, hAlign:center, vAlign:middle, offsetX:14` | -| 选主 · 对数角标 | `attach` | `target:对应花色按钮, corner:topRight, offsetX:-36, offsetY:2` | +| 选主 · 张数(十位) | `attach` | `target:对应花色按钮, hAlign:center, vAlign:bottom, offsetX:-12, offsetY:-6, w:24, h:32`(十位为 0 时隐藏) | +| 选主 · 张数(个位) | `attach` | `target:对应花色按钮, hAlign:center, vAlign:bottom, offsetX:12, offsetY:-6, w:24, h:32`(始终显示) | +| 选主 · 对数角标文字 | `attach` | `target:对应花色按钮, corner:topRight, offsetX:-36, offsetY:2`(按钮帧内已含角标底,本节点只定位叠加文字) | | 埋牌 · 操作条 | `line` + `items` | `direction:horizontal anchorX:640 anchorY:165 itemHeight:63 spacing:45 anchor:center`,`items:[180,60,180]`(提示 / 倒计时 / 埋牌) | | 出牌 · 操作条 | `line` + `items` | `direction:horizontal anchorX:640 anchorY:345 itemHeight:55 spacing:35 anchor:center`,`items:[75,157]`(倒计时 / 出牌) | | 捡分飘字 | `point` | `x:570 y:180 w:170 h:55`;另配 `floatRise:-60`、`floatDuration:800`(动画参数也进配置) |