二七王:补齐三处配置缺口(扣底按钮 / 出牌提示按钮槽位 / 三个 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:
@@ -198,7 +198,7 @@ get_nextseat: function(seat){ return (seat + 1) % 3; }
|
||||
| --- | --- |
|
||||
| 201 | 顶部信息条(主 / 叫分 / 抓分) |
|
||||
| 202 / 203 / 204 | 左上家 / 右上家 / 自己 的附加标记(庄印章、主N对N、状态文字) |
|
||||
| 205 | 底栏功能按钮组(明牌 / 已出牌 / 上一轮 / 底牌) |
|
||||
| 205 | 底栏功能按钮组(明牌 / 已出牌 / 上一轮 / 扣底 / 底牌) |
|
||||
| 206 | **主牌统计条**(自己的 `x对 x主`,§2.5)—— 常量名 `ZHU_STAT_BAR` |
|
||||
| 210 | 自己手牌 |
|
||||
| 211 | 底牌区(发牌留桌 8 张) |
|
||||
@@ -214,6 +214,7 @@ get_nextseat: function(seat){ return (seat + 1) % 3; }
|
||||
| 241 | 大局总结算 |
|
||||
| 242 | 出牌历史 |
|
||||
| 243 | 明牌面板 |
|
||||
| 244 | 冲关牌型叠加层(§5.6a) |
|
||||
| 250 | 建房规则选项 |
|
||||
|
||||
> **2026-08-27 修订 · 群组 206 改名**:原名「亮牌信息条 / `LIANGPAI_BAR`」,实为 §2.5 的**自己的主牌统计条**(手牌上方 `x对 x主`,本地统计、有手牌时常显),与 design §8.2 的「**亮牌**」(庄家埋牌后向两个闲家亮出自己全部固定主牌的**具体牌面**,走遮罩面板、群组 242)**同名异实**——§0.0 已专门花一节区分「亮牌 / 余主公示 / 明牌 / 开底」四类公开信息,名字撞车极易把渲染写到错误的界面上。
|
||||
@@ -623,7 +624,7 @@ EQW_RoomOptions = {
|
||||
|
||||
**收到 `maipai` 推送后**(字段 `cards`、`bottomcards`、`seat`、`countdown`、`liangpai`):
|
||||
- 庄家手牌回到单排 28 张;
|
||||
- **闲家**若收到 `liangpai`(仅可查牌模式 + 庄家达标),弹出下方「亮牌」**遮罩面板**(群组 242,精灵 `HIST_*`,见 §5.7b)——**不是** §2.5 那条主牌统计条(原表述「渲染 §2.5 亮牌信息条」是同名异实造成的笔误,2026-08-27 订正);
|
||||
- **闲家**若收到 `liangpai`(仅可查牌模式 + 庄家达标),弹出下方「亮牌」**遮罩面板**(群组 242,精灵 `HIST_*`,见 §5.7b / §6.9c)——**不是** §2.5 那条主牌统计条(原表述「渲染 §2.5 亮牌信息条」是同名异实造成的笔误,2026-08-27 订正);
|
||||
- 进入出牌,`seat` = 首出者(必为庄家)。
|
||||
|
||||
**亮牌**(design §8.2,协议 `liangpai`):
|
||||
@@ -1048,7 +1049,7 @@ y≈648–720 深色条。左侧头像/昵称/分数由平台渲染(§0.2)
|
||||
>
|
||||
> **实现要求**:前端内部变量仍建议用 `bottomCards` / `buryCards` 区分,与字段名一一对应。已列入验收清单(§7.3)。
|
||||
|
||||
- 精灵:群组 205,号段 1040–1069(5 个按钮 × 2 精灵 = 10)。
|
||||
- 精灵:群组 205,号段 1040–1069(5 个功能按钮 × 2 精灵 = 10,`扣底` 为 1056/1057,2026-08-27 补齐;另有 3 个提示按钮 × 2 精灵)。
|
||||
|
||||
### 2.7 手牌区 【图:全部】
|
||||
|
||||
@@ -1293,6 +1294,8 @@ design 与协议均**未定义任何音效**。以下是按牌类游戏常规推
|
||||
| | 1053 | `BTN_TISHI_HAS_TEXT` | 文字 | `有分` | —— |
|
||||
| | 1054 | `BTN_TISHI_NONE` | 图片 | `没分` | `BTN_TISHI` |
|
||||
| | 1055 | `BTN_TISHI_NONE_TEXT` | 文字 | `没分` | —— |
|
||||
| | **1056** | `BTN_BURY_CARDS` | 图片 | **`扣底`**(看**埋牌底牌**,2026-08-27 补齐) | `BTN_BOTTOM_FUNC` |
|
||||
| | **1057** | `BTN_BURY_CARDS_TEXT` | 文字 | 按钮文案 `扣底` | —— |
|
||||
| **202** 左上家标记 | 1100 | `P_LEFT_BANKER` | 图片 | `庄` 印章 | `MARK_BANKER` |
|
||||
| | 1101 | `P_LEFT_ZHU_BG` | 图片 | `主N` 角标底 | `BADGE_ZHU_PAIR` 帧1 |
|
||||
| | 1102 | `P_LEFT_ZHU_TEXT` | 文字 | 剩余主牌数 | —— |
|
||||
@@ -1464,6 +1467,8 @@ for (var i = 0; i < cards.length; i++) {
|
||||
**清理**:关闭面板时 `removeRange` 清掉各段。
|
||||
|
||||
> 解散结算复用本面板(协议 §14.1,解散包也带 `account`),只是 `aset` 各项为 0。
|
||||
>
|
||||
> **布局配置见 §6.9a**(2026-08-27 补齐;此前本 View 没有任何布局节点)。
|
||||
|
||||
### 5.7b Layer 304 / 305 · 出牌历史与明牌(群组 242 / 243,**牌用精灵复制**)
|
||||
|
||||
@@ -1486,6 +1491,8 @@ for (var i = 0; i < cards.length; i++) {
|
||||
- **亮牌**:只显示一排(庄家的固定主牌),数据 = `liangpai.cards`(§1.6)。复用同一套遮罩 + 容器 + 牌模板,仅数据源与排数不同。
|
||||
⚠ 这里的「亮牌」是 design §8.2 那件事,**与 §2.5 手牌上方的主牌统计条(群组 206 `ZHU_STAT_*`)无关**——后者 2026-08-27 前也叫「亮牌条」,已改名以消歧义。
|
||||
|
||||
> **布局配置见 §6.9c**(2026-08-27 补齐;此前 `HIST_*` / `MING_*` 都没有布局节点)。
|
||||
>
|
||||
> 解散投票由平台提供(Layer 420),子游戏无需精灵。
|
||||
|
||||
### 5.8 建房规则选项(群组 250,2050–2099,预置)
|
||||
@@ -1681,7 +1688,7 @@ CARD_SIZE: {
|
||||
| 主牌统计条(节点 `ZHU_STAT_BG`) | `point` | `x:35 y:400 w:210 h:35` |
|
||||
| 底栏条 | `point` | `x:0 y:648 w:1280 h:72` |
|
||||
| 底栏 · 局数文字 | `point` | `x:635 y:672 w:65 h:26`,`textStyle{fontSize:20, align:center}` |
|
||||
| 底栏 · 功能钮组(明牌/已出牌/上一轮/底牌) | `line` + `items` | `direction:horizontal, anchorX:1250, anchorY:672, itemHeight:30, spacing:15, anchor:right`,`items:[74,87,93,78]`(逐项不等宽,见 §6.1) |
|
||||
| 底栏 · 功能钮组(明牌/已出牌/上一轮/**扣底**/底牌) | `line` + `items` | `direction:horizontal, anchorX:1250, anchorY:672, itemHeight:30, spacing:15, anchor:right`,`items:[74,87,93,**78***,78]`(逐项不等宽,见 §6.1)。**\*`扣底` 的 78 是估值**(2026-08-27 补项,本表原只列 4 项)——同为两字按钮的 `底牌` 实测 78、`明牌` 74,故取 78,待设计稿复核 |
|
||||
| 底栏 · 庄标 | `point` | `x:338 y:668 w:32 h:34` |
|
||||
| 底栏 · 提示按钮组(踩/有分/没分) | `line` | `direction:horizontal, anchorX:335, anchorY:672, itemWidth:52, itemHeight:30, spacing:26, anchor:left` |
|
||||
| 右侧语音钮(平台) | `point` | `x:1210 y:310 w:56 h:56` |
|
||||
@@ -1747,7 +1754,7 @@ CARD_SIZE: {
|
||||
| 选主 · 张数 | `attach` | `target:对应花色按钮, hAlign:center, vAlign:bottom, offsetY:-6, h:NUM_STYLE.MAIN_SUIT_COUNT.charHeight(32)`;`w` 运行时注入(`9张`=2 字符、`26张`=3 字符,宽度随之变)。一个花色一个精灵 |
|
||||
| 选主 · 对数角标文字 | `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]`(倒计时 / 出牌) |
|
||||
| 出牌 · 操作条 | `line` + `items` | `direction:horizontal anchorX:640 anchorY:345 itemHeight:55 spacing:35 anchor:center`,`items:[75,157,**180***]`(倒计时 / 出牌 / **提示**)。**\*`提示` 的 180 是估值**(2026-08-27 补项,本表原漏了 §1.7 明确要求的 `提示` 按钮)——与埋牌条的 `提示` 同资源 `BTN_TIP`(§3.3 实测 180×63),埋牌条 `items` 首项亦取 180,故沿用;顺序照 §1.7 行文。⚠ 本条 `itemHeight:55` 对齐的是 `BTN_PLAY`(157×55),而 `BTN_TIP` 原生高 63,高度差待设计稿裁定 |
|
||||
| 捡分飘字 | `point` | `x:570 y:180 w:170 h:55`;另配 `floatRise:-60`、`floatDuration:800`(动画参数也进配置) |
|
||||
| 状态提示条 · 等待类 | `point` | `x:500 y:373 w:320 h:47`(§2.8) |
|
||||
| 状态提示条 · 即时反馈类 | `point` | `x:462 y:172 w:363 h:50`;另配 `toastDuration:1500` |
|
||||
@@ -1781,6 +1788,48 @@ CARD_SIZE: {
|
||||
| `下一局` 按钮 | `point` | `x:835 y:518 w:180 h:65` |
|
||||
| 冲关遮罩 | `point` | `x:0 y:0 w:1280 h:720`,`opacity:0.72`(透明度也是配置项) |
|
||||
|
||||
#### 6.9a 大局总结算配置(§1.9 / §5.7a,2026-08-27 补齐)
|
||||
|
||||
> 本表原先**整块缺失**——`Layout_Result.js` 里一个 `ACC_*` 节点都没有,实现时极易在渲染代码里就地硬编码坐标(违反 §6 零裸值)。
|
||||
> **坐标全部是 `uiref/大局结算.png` 的目视实测估值(±5px)**,`w`/`h` 取 §3.5 / §3.3 的资源尺寸(那是权威值)。**待设计稿复核**。
|
||||
> **玩家栏是精灵复制**(§5.7a),故不逐行写死,而是给「容器 + 行节点(行高即 `itemHeight`)+ 行内模板贴附到行矩形」;行数由数据给出(`ctx.count`),不进配置。
|
||||
> ⚠ `ACC_ROW` 及贴附其上的节点求出的坐标都是**相对 `ACC_ROW_CONTAINER` 的**——复制精灵是容器的子精灵,`x/y` 本就相对容器,求解结果可直接喂 `SpriteCopyUtils.create`(与 §5.6a 冲关牌同一用法)。
|
||||
|
||||
| 部件 | 节点名 | kind | 参数(目视实测估值) |
|
||||
| --- | --- | --- | --- |
|
||||
| 面板底 | `ACC_PANEL_BG` | `point` | `x:80 y:88 w:1100 h:540` |
|
||||
| 标题栏 | `ACC_TITLE_BAR` | `attach` | `target:ACC_PANEL_BG, corner:topLeft, offset(0,0), w:1100 h:56` |
|
||||
| 标题文字 | `ACC_TITLE_TEXT` | `attach` | `target:ACC_TITLE_BAR, hAlign:left, vAlign:middle, offsetX:30`;`w/h` 运行时注入(文案长度不定) |
|
||||
| 关闭按钮 | `ACC_BTN_CLOSE` | `attach` | `target:ACC_TITLE_BAR, corner:topRight, offset(-20,10), w:36 h:36` |
|
||||
| 规则栏 | `ACC_RULE_BAR` | `attach` | `target:ACC_PANEL_BG, corner:bottomLeft, offset(0,0), w:1100 h:62` |
|
||||
| 规则文字 | `ACC_RULE_TEXT` | `attach` | `target:ACC_RULE_BAR, hAlign:left, vAlign:middle, offsetX:30`;`w/h` 运行时注入 |
|
||||
| 玩家栏**容器** | `ACC_ROW_CONTAINER` | `point` | `x:80 y:144 w:1100 h:422`(标题栏下沿 → 规则栏上沿) |
|
||||
| 玩家栏**行** | `ACC_ROW` | `line` | `direction:vertical, anchorX:0, anchorY:14, itemWidth:1100, **itemHeight:132(行高)**, spacing:0, anchor:top`(相对容器;行数 = `ctx.count`) |
|
||||
| 行内 · 名次徽章 | `ACC_TPL_RANK` | `attach` | `target:ACC_ROW, hAlign:left, vAlign:middle, offsetX:28, w:44 h:44` |
|
||||
| 行内 · 头像 | `ACC_TPL_AVATAR` | `attach` | `target:ACC_ROW, hAlign:left, vAlign:middle, offsetX:92, w:80 h:80` |
|
||||
| 行内 · 文字栅格(6 条文字的槽位) | `ACC_ROW_TEXT_GRID` | `grid` | `anchorX:192, cols:4, rows:2, itemWidth:176, itemHeight:34, spacingX:0, spacingY:10, anchor:left, fillOrder:row`;`anchorY` 运行时注入(随所在行浮动)。列序:昵称/`ID:` · 基础分/总得分 · 冲关分 · 傍王分(第 2 行仅前两列有文字) |
|
||||
| 行内 · 右侧总分大字 | `ACC_TPL_SCORE_NUM` | `attach` | `target:ACC_ROW, hAlign:right, vAlign:middle, offsetX:-25, h:NUM_STYLE.RESULT_WIN.charHeight(62)`;`w` 运行时注入 |
|
||||
| 行内 · 分隔线 | `ACC_TPL_DIVIDER` | `attach` | `target:ACC_ROW, hAlign:center, vAlign:bottom, offset(0,0), w:1060 h:2`(`vAlign:bottom` 的语义是"目标底边之下",见 §6.0) |
|
||||
| 面板**外**底部 4 按钮 | `ACC_FUNC_BUTTONS` | `line` | `direction:horizontal, anchorX:345, anchorY:640, itemWidth:190, itemHeight:60, spacing:25, anchor:left`(参考图里这排不居中于屏幕、整体偏右,故用 `anchor:left` 定起点) |
|
||||
|
||||
#### 6.9c 出牌历史 / 亮牌 · 明牌配置(§5.7b,2026-08-27 补齐)
|
||||
|
||||
> 本表同样原先**整块缺失**(`HIST_*` / `MING_*` 一个节点都没有)。
|
||||
> 两者与冲关牌型叠加层是**同一种版式**(半透黑遮罩 + 每家一排重叠大牌,参考图同为 `uiref/冲关牌型显示.png`),故照 §6.7 的 `CHONGGUAN_FAN` 同构给出,三家锚点沿用冲关牌的 `LEFT 260,120 / RIGHT 1035,120 / SELF 640,400`。
|
||||
> **与冲关牌的唯一差别是张数上限**:出牌历史摊平后可达 28 张以上,`maxWidth:420` 装不下,故放宽到 **500**、`spacingMin` 收到 **-96**(每张露 14px,28 张总宽 `110+27×14=488 ≤ 500`)。这两个数是**估值,待设计稿复核**。
|
||||
> 牌用精灵复制:三个容器精灵摆在原点、尺寸铺满屏,故 `fan` 求出的屏幕坐标可直接当容器内坐标用。
|
||||
|
||||
| 部件 | 节点名 | kind | 参数 |
|
||||
| --- | --- | --- | --- |
|
||||
| 出牌历史 · 遮罩 | `HIST_MASK` | `point` | `x:0 y:0 w:1280 h:720, opacity:0.72`(【亮牌】用途下**不注册点击**,见 §1.6) |
|
||||
| 出牌历史 · 三个牌容器 | `HIST_BOX` | `point` | `x:0 y:0 w:1280 h:720`(同摆原点、铺满屏) |
|
||||
| 出牌历史 · 每家一排牌 | `HIST_FAN` | `fan` | `size:L, anchor:center, maxWidth:500, spacingMax:-40, spacingMin:-96`;`bySeat{ LEFT:{260,120}, RIGHT:{1035,120}, SELF:{640,400} }` |
|
||||
| 出牌历史 · 座位标签 | `HIST_LABEL` | `point` | `bySeat{ LEFT:{200,318}, RIGHT:{975,318}, SELF:{580,598} }`;`w/h` 运行时注入 |
|
||||
| 明牌 · 遮罩 | `MING_MASK` | `point` | 同 `HIST_MASK` |
|
||||
| 明牌 · 两个牌容器 | `MING_BOX` | `point` | 同 `HIST_BOX` |
|
||||
| 明牌 · 每家一排牌 | `MING_FAN` | `fan` | 同 `HIST_FAN`,但 **`bySeat` 只有 LEFT / RIGHT**(明牌只看他家,没有自己那排;精灵 `MING_BOX_A` 落 LEFT 位、`MING_BOX_B` 落 RIGHT 位) |
|
||||
| 明牌 · 座位标签 | `MING_LABEL` | `point` | `bySeat{ LEFT:{200,318}, RIGHT:{975,318} }`;`w/h` 运行时注入 |
|
||||
|
||||
### 6.9b 建房规则选项配置(§1.1)
|
||||
|
||||
布局是**两层嵌套**:类别竖排,类别内的选项组横排。
|
||||
|
||||
Reference in New Issue
Block a user