From fd31272bd18a29673c0df764086638fddf29205b Mon Sep 17 00:00:00 2001 From: Joywayer Date: Wed, 26 Aug 2026 12:12:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E4=B8=83=E7=8E=8B=EF=BC=9AD-8=20?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E7=BB=93=E6=9E=9C=E6=94=B9=E4=B8=BA=E5=8A=A8?= =?UTF-8?q?=E7=94=BB=E5=91=88=E7=8E=B0=EF=BC=8C=E5=B9=B6=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=20S-8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 小局结算面板【不做】大光/小光/过庄/升N级 的静态文字,改由动画在两个时机 呈现:对局过程中(判定档位跳变时)与结算前(最终判定)。精灵 1814 RESULT_JUDGE_TEXT 与资源 634 的静态文字方案作废,634 改为帧动画资源 ANI_JUDGE,播放参数进 AnimationConfigs。 动画遵守「数据优先、表现延后」:先写数据再播动画,动画回调只刷界面不写 核心数据;动画缺失或卡住时结算面板与数据仍正确。 新增 S-8(阻塞 D-8 的过程中动画):S-1 实现 curmultiple 时取了绝对值, 而判定的正负号恰恰是「谁赢」的区分——取绝对值后 3 大光 vs -3 升3级、2 小光 vs -2 升2级、1 过庄 vs -1 升1级 三对完全撞在一起,过程中动画无从判断该播哪个。建议改为带符号、与结算包 aset.upgrade 同口径,前端一套映射通吃两条路径;顶部抓分角标取 Math.abs 即可,不受影响。 当初取绝对值是因为 S-1 只服务顶部角标一个用途、只关心大小;现在多了动画 这个消费方,符号成了必需信息。 Co-Authored-By: Claude Opus 5 (1M context) --- docs_dev/二七王-UI资源与精灵清单.md | 49 +++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/docs_dev/二七王-UI资源与精灵清单.md b/docs_dev/二七王-UI资源与精灵清单.md index 8b47859..3f8a88e 100644 --- a/docs_dev/二七王-UI资源与精灵清单.md +++ b/docs_dev/二七王-UI资源与精灵清单.md @@ -824,11 +824,24 @@ EQW_RoomOptions = { | `banker` / `call` / `flower` | 顶部信息条最终态 | | `multiple` | 基础子数 | | `grade` | 闲家最终捡分(含扣底)→ 顶部 `抓分` 列 | -| `upgrade` | **判定倍率(带符号)**:`3` 大光 / `2` 小光 / `1` 过庄 / `-N` 升 N 级(倒庄)/ `-99` 投降 / `0` 解散 → 需要一组判定文字或图标:`大光` `小光` `过庄` `升N级` `投降`【待设计 D-8】 | +| `upgrade` | **判定倍率(带符号)**:`3` 大光 / `2` 小光 / `1` 过庄 / `-N` 升 N 级(倒庄)/ `-99` 投降 / `0` 解散。**结算面板不显示判定文字**——判定结果由**动画**呈现,见 §1.8「判定结果动画」 | | `bangwang` / `climb` | 本局规则开关,用于结算面板上标注 | | **`cards`** | **冲关牌型叠加层**的牌(见上) | | `chongguan` / `wang` / `naward` | 冲关奖数 / 王数 / **总奖数**。叠加层**需要并列显示奖数**——以 `naward`(该家总奖数 N,8.4 节的支付基数)为主;`chongguan` / `wang` 作为明细可选展示 | +#### 判定结果动画(D-8) + +**结算面板上不做判定文字**。大光 / 小光 / 过庄 / 升N级 / 投降这几个判定,由**动画**在两个时机呈现: + +| 时机 | 数据来源 | 说明 | +| --- | --- | --- | +| **对局过程中** | `curmultiple`(随 `chupai1/2/3` 下发,S-1) | 捡分变化导致判定档位跳变时提示,例如从「大光」掉到「小光」、或闲家捡够分数「过庄→升级」 | +| **结算前** | `aset.upgrade`(结算包,带符号) | 末轮打完、结算面板出现**之前**播一次最终判定 | + +**动画播放遵守「数据优先、表现延后」**(client 02 §3):先 `setXxx` 把结算数据写进 `this.data`,再播动画;动画的开始/结束/出错回调里**只刷界面、不写核心数据**。动画缺失或卡住时,结算面板与数据仍须正确。 + +> ⚠️ **过程中的判定动画需要「带符号」的判定值,而 `curmultiple` 目前是绝对值**——`Math.abs` 之后,「大光 ×3」与「闲家升 3 级 ×3」都是 `3`,无法区分该播哪个动画。详见 §7.5 **S-8**。 + **投降结算**:只有 `aset`,无 `chupai`、无 `bottom` → 结算面板必须容忍**底牌区缺失**,不能因为读不到 `bottom.cards` 就崩或显示空框。 ### 1.9 大局总结算 `account` 【图:大局结算.png】 @@ -1159,7 +1172,7 @@ y≈648–720 深色条。左侧头像/昵称/分数由平台渲染(§0.2) | 635 | `NUM_CALL_SCORE` | **叫分档位的分数数字**(深棕描边美术字) | 10 | 帧1–10 = 0–9 | 30 × 40 | | 632 | `NUM_RESULT_WIN` | 结算得分数字(赢,橙) | 12 | 帧1–10 = 0–9,帧11 = `+`,帧12 = `-` | 46 × 62 | | 633 | `NUM_RESULT_LOSE` | 结算得分数字(输,蓝) | 12 | 同上 | 46 × 62 | -| 634 | `TXT_JUDGE` | 判定结果文字 | ≥5 | 帧1=大光 帧2=小光 帧3=过庄 帧4=升级 帧5=投降【待设计】 | 待定 | +| 634 | `ANI_JUDGE` | **判定结果动画**(大光 / 小光 / 过庄 / 升N级 / 投降)——帧动画资源,播放参数进 `AnimationConfigs`【待设计 D-8】 | 待定 | 待定 | 待定 | > **带描边/渐变的美术字用图片多帧精灵**(倒计时、结算得分、叫分分数),文字精灵做不出这种效果——631–635 都要出图。 > **纯数据型小字用文字精灵**(`SpriteManager.setText`):叫分角标的子数(值域 2–15,随爬坡开关变)、`主N`/`对N` 角标、局数、亮牌统计等。 @@ -1335,7 +1348,7 @@ design 与协议均**未定义任何音效**。以下是按牌类游戏常规推 | 1805–1807 | `RESULT_SCORE_LEFT/RIGHT/SELF` | 文字 ×3 | 三家总分(`aset.seatlist[i].grade`) | —— | | 1808–1810 | `RESULT_JF_LEFT/RIGHT/SELF` | 文字 ×3 | 捡分子数得分 `grade_jf`【T-13】 | —— | | 1811–1813 | `RESULT_AW_LEFT/RIGHT/SELF` | 文字 ×3 | 算奖得分 `grade_aw`【T-13】 | —— | -| 1814 | `RESULT_JUDGE_TEXT` | 文字 | 判定结果(大光/小光/过庄/升N级/投降,据 `aset.upgrade`) | —— | +| ~~1814~~ | ~~`RESULT_JUDGE_TEXT`~~ | —— | **不需要**:结算面板不显示判定文字,改由动画呈现(§1.8) | —— | | 1815 | `RESULT_BTN_CG` | 图片 | `冲关牌型` 按钮 | `BTN_CG_CARDS` | | 1816 | `RESULT_BTN_CG_TEXT` | 文字 | 按钮文案 | —— | | 1817 | `RESULT_BTN_NEXT` | 图片 | `下一局` 按钮 | `BTN_NEXT_ASET` | @@ -1777,8 +1790,8 @@ codes/config/ ## 7. 待补充清单 -> **状态汇总**(2026-08-26):待确认规格 34 项**只剩 T-20 音效**(已明确后补);设计稿只剩 **D-8**(判定结果文字)。 -> **§7.5 服务端待补项 7 条已全部处理完毕**(S-1/S-2/S-4/S-6 有代码改动,S-3/S-5/S-7 为定论或文档同步)。**服务端侧无遗留**。 +> **状态汇总**(2026-08-26):待确认规格 34 项**只剩 T-20 音效**(已明确后补);设计稿只剩 **D-8**(判定结果**动画**)。 +> **§7.5 服务端待补项**:S-1…S-7 已处理完毕;**新增 S-8**(`curmultiple` 需带符号,阻塞 D-8 的过程中动画)待处理。 ### 7.1 待出设计稿的界面 @@ -1786,7 +1799,7 @@ codes/config/ | 编号 | 界面 | 状态 | | --- | --- | --- | -| **D-8** | 判定结果文字(大光 / 小光 / 过庄 / 升N级 / 投降) | ⬜ **暂留**——待其余项落定后单独讨论 | +| **D-8** | **判定结果动画**(大光 / 小光 / 过庄 / 升N级 / 投降) | ⬜ 已定形态:**不做结算面板上的静态文字,改为动画**,在**对局过程中**与**结算前**播放(§1.8)。缺动画设计稿与触发细节 | | ~~D-1~~ | 建房规则选项区 | ✅ 定稿:版式照 `创建房间选项…png`,内容按 §1.1 的 3 类别 / 4 选项组。**子游戏只做「类别标签 + 选项」内容区**,弹窗背景 / 标题 / 关闭 / 确认按钮均由平台提供 | | ~~D-2~~ | 底牌 3 秒展示 | ✅ 定稿:**复用庄家翻开底牌那套 UI**(`叫分确定庄.png`),**不要倒计时**。非 70 分只有庄家能看、70 分全场能看——同一套界面,只差可见范围 | | ~~D-3~~ | 甩错提示 | ✅ 定稿:桌面中央深色半透条 **`强甩失败`**(`强甩失败提示.png`),**不做收回动画**,直接落下那张被强制打出的最小主牌 | @@ -2039,6 +2052,30 @@ data.bottom.cards // 结算包 > 之前记录的「有主牌的玩家伪造请求也能拿到明牌数据」这一泄露担忧**不成立**:按手册他本来就有权查看,服务端受理是正确行为,不是校验缺失。 + +#### S-8 · `curmultiple` 需要带符号(新增,⚠️ 阻塞 D-8 的过程中动画) + +**背景**:D-8 定为「判定结果由动画呈现」,其中**对局过程中**那一路要靠 `curmultiple`(S-1)判断当前是哪一档判定。 + +**问题**:S-1 实现时把 `curmultiple` 取了**绝对值**(`class.paiju.js` `get_curmultiple` 末行 `return (_u < 0) ? (0 - _u) : _u;`)。而判定的**正负号恰恰是「谁赢」的区分**: + +| `get_upgrade` 原值 | 判定 | 取绝对值后 | +| --- | --- | --- | +| `3` | 庄家**大光** | `3` | +| `-3` | 闲家**升 3 级** | `3` ← **撞了** | +| `2` | 庄家**小光** | `2` | +| `-2` | 闲家**升 2 级** | `2` ← **撞了** | +| `1` | 庄家**过庄** | `1` | +| `-1` | 闲家**升 1 级** | `1` ← **撞了** | + +三对判定在绝对值下完全无法区分,**过程中动画不知道该播哪个**。 + +**建议**:`curmultiple` 改为**带符号**,与结算包 `aset.upgrade` 完全同口径(正=庄家赢的三档,负=闲家升级)。这样前端一套映射通吃「过程中」与「结算前」两条路径,不必写两份。 + +- 顶部「抓分」角标要显示的是倍数大小 → 前端取 `Math.abs(curmultiple)` 即可(§2.1),不受影响。 +- 改动很小:去掉取绝对值那一步 + 协议说明 + 测试断言同步。 +- **为什么当初取了绝对值**:S-1 只服务于顶部角标那一个用途,角标只关心大小。现在多了动画这个消费方,符号成了必需信息。 + --- ## 附:本文与其他文档的关系