diff --git a/client/js/01_SubGame/codes/config/Sprites_Action.js b/client/js/01_SubGame/codes/config/Sprites_Action.js index 56d1680..7c00c37 100644 --- a/client/js/01_SubGame/codes/config/Sprites_Action.js +++ b/client/js/01_SubGame/codes/config/Sprites_Action.js @@ -7,6 +7,82 @@ // 连号精灵逐条写全,不用循环生成。 var EQW_Sprites = EQW_Sprites || {}; +// ============================================================================ +// 叫分面板 - Layer 104 (ACTION), Group 220 (CALL_PANEL) +// ============================================================================ + +/** + * 叫分面板 - CallPanelView + * + * 用途: 轮到【自己】叫分时在桌面中央弹出,14 个档位按钮(两行 × 7)+「不叫」按钮 + + * 上方一条静态提示条。收到 jiaofen 推送后收起。轮到他家叫分时本面板不出现。 + * + * 布局说明(参考图 docs_dev/uiref/自己叫分.png 全景、docs_dev/uiref/叫分按钮面板.png 近景): + * + * ┌──────────────────────────────┐ y=100 x=470,345×33 + * │ 70分坐庄才可投降 │ ← CALL_HINT_BG(1601) + * └──────────────────────────────┘ y=133 +CALL_HINT_TEXT(1602) + * ┌────────────────────────────────────────────────────────────┐ y=140 + * │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ x=355 + * │ │70│ │65│ │60│ │55│ │50│ │45│ │40│ ← 行1 = 档位 1–7 │ 575×170 + * │ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ │ + * │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ + * │ │35│ │30│ │25│ │20│ │15│ │10│ │5 │ ← 行2 = 档位 8–14 │ + * │ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ │ + * └────────────────────────────────────────────────────────────┘ y=310 + * ↑ CALL_PANEL_BG(1600) 面板底 + * 档位排布 EQW_Layout.CALL_BTN_GRID: grid, anchor center, anchorX=640 anchorY=160, + * cols=7 rows=2, itemWidth=74 itemHeight=56, spacingX=7 spacingY=24, fillOrder='row' + * + * 12 ┌──────────────┐ y=345 + * ↑ │ 不 叫 │ x=553, 184×57 + * CD_SELF └──────────────┘ y=402 + * (CountdownView, ↑ CALL_BTN_NONE(1645)+CALL_BTN_NONE_TEXT(1646) + * EQW_Layout.P_COUNTDOWN.SELF = 445,345) + * + * 单个档位按钮由【3 个精灵】叠成(第 n 档 n=1..14): + * + * ┌───────────────┐ + * │ ┌────┐│ ← CALL_BTN_BADGE_n (1631+n-1) 文字精灵,随爬坡开关变 + * │ │2子 ││ EQW_Layout.CALL_BTN_MULTIPLE_BADGE: attach 按钮 topRight(-30,+2) + * │ 70 └────┘│ ← CALL_BTN_NUM_n (1617+n-1) 多帧图数字精灵 + * │ │ EQW_Layout.CALL_BTN_SCORE_NUM: attach 按钮 center/middle(+4) + * └───────────────┘ + * ↑ CALL_BTN_n (1603+n-1) 按钮底(已含右上角角标底),74×56 + * + * 元素说明: + * - 14 档固定为 70 65 60 55 50 45 40 / 35 30 25 20 15 10 5(行1 = 70…40,行2 = 35…5)。 + * - 【按钮配色按档位位置写死,不随数据变】: + * 位置 1–4 (70/65/60/55) → 帧1 浅黄底 + 蓝角标底 + * 位置 5–7 (50/45/40) → 帧2 金黄底 + 绿角标底 + * 位置 8–14 (35…5) → 帧3 橙底 + 深橙角标底 + * 不可叫(已被叫过 / 不高于 currcall)→ 帧4 全灰 + * ⚠ 参考图里角标写的 1子/2子/4子 是填充假数据(§0.5),恰好与三组配色一一对应, + * 【不要据此以为颜色随子数变】——颜色按位置固定,角标数值才随爬坡开关变。 + * 反证:常规算子下 50/45/40 与 35…5 的 multiple 同为 6 子,图里却是两种颜色。 + * - 【两种数字,两种精灵】档位分数用多帧图数字精灵(带描边美术字,setNumberImage 整串一个 + * 精灵,两位数不拆);角标子数用文字精灵(值域 2–15,随爬坡动态变,用文字最省)。 + * - 可选性由服务端权威 currcall 决定,前端只据其置灰、不自行推导规则: + * 暂定庄家首叫 → 5–70 全可选,【无「不叫」】;其后 → 只有严格低于 currcall 的档位可选。 + * - 【悲观 UI】点击后只发包(jiaofen {seat, call},不叫为 call:0),面板收起与状态文字 + * 出现一律等推送包到达再做;唯一允许的乐观处理是按钮本身防连点禁用。 + * - 上方提示条「70分坐庄才可投降」是静态文字,仅在面板展开时显示。 + * + * 资源说明: + * - 面板底: EQW_Images.PANEL_CALL_SCORE (602), 1 帧, 575×170 + * - 提示条底: EQW_Images.BAR_HINT_TOP (603), 1 帧, 345×33 + * - 档位按钮底: EQW_Images.BTN_CALL_SCORE (531), 4 帧, 74×56(含角标底,见上) + * - 档位数字: EQW_Images.NUM_CALL_SCORE (635), 16 帧固定帧序 0123456789.+-x/p, + * 单字符 30×40, 整图 480×40;charWidth 取 EQW_Layout.NUM_STYLE.CALL_SCORE.charWidth + * - 不叫按钮: EQW_Images.BTN_NO_CALL (532), 1 帧, 184×57, 蓝色渐变 + * + * 精灵ID分配: 1600–1646(群组 220 号段 1600–1649) + * + * @see docs_dev/二七王-UI资源与精灵清单.md §1.3 叫分坐庄 / §5.4 Layer 104 / §6.8 + * @see docs_dev/uiref/自己叫分.png + * @see docs_dev/uiref/叫分按钮面板.png + * @see docs_dev/uiref/自己已经叫分轮到下家叫分.png + */ //叫分面板:14 档位按钮 + 「不叫」按钮(清单 §5.4,Layer 104 群组 220) EQW_Sprites.CallPanelView = { Layer: EQW_Layers.ACTION, //104 @@ -76,6 +152,67 @@ EQW_Sprites.CallPanelView = { } }; +// ============================================================================ +// 选主 / 投降面板 - Layer 104 (ACTION), Group 221 (CHOOSE_MAIN) +// ============================================================================ + +/** + * 选主 / 投降面板 - ChooseMainView + * + * 用途: 庄家上庄后弹出,让庄家在【4 个花色】与【投降】之间二选一(同一决策点、互斥)。 + * 只有庄家看得到;两个闲家此时看到的是「等待庄家选主」提示条(OverlayView)。 + * 收到 xuanzhu 推送后收起,进入埋牌。 + * + * 布局说明(参考图 docs_dev/uiref/亮主.png): + * + * ┌─────────────────────────────────────────┐ y=315 x=330, 425×50 + * │ 亮主 20 │ ← MAIN_TITLE_BG(1650) 斜角条 + * └─────────────────────────────────────────┘ y=365 +MAIN_TITLE_TEXT(1651)「亮主」 + * ↑ ↑ + * 标题文字 倒计时 CD_SELF(属 CountdownView,不在本群组) + * + * ┌─────────┐┌─────────┐┌─────────┐┌─────────┐┌─────────┐ y=373 x=330 起 + * │ ♠ 2对 ││ ♥ 2对 ││ ♣ 2对 ││ ♦ 2对 ││ 投 降 │ 128×55,间距 9 + * │ 6张 ││ 8张 ││ 6张 ││ 7张 ││ │ + * └─────────┘└─────────┘└─────────┘└─────────┘└─────────┘ y=428 + * ↑ ↑ ↑ ↑ + * │ │ └ MAIN_SUIT_BTN_2(1653) … └ MAIN_BTN_SURRENDER(1672) + * │ └ MAIN_SUIT_PAIR_TEXT_n(1668+)「N对」文字精灵,叠在按钮帧内的角标底上 + * │ EQW_Layout.MAIN_SUIT_PAIR_BADGE: attach 按钮 topRight(-36,+2), 34×18 + * └ MAIN_SUIT_BTN_1(1652):一个精灵一帧就含「按钮底 + 花色图标 + 右上角蓝色角标底」 + * 下方 MAIN_SUIT_COUNT_n(1674+)「N张」多帧图数字精灵 + * EQW_Layout.MAIN_SUIT_COUNT: attach 按钮 center/bottom(-6) + * + * 排布 EQW_Layout.MAIN_SUIT_LINE: line/horizontal, anchor='left', + * anchorX=330 anchorY=373, itemWidth=128 itemHeight=55, spacing=9 + * —— anchor 取 left 是有意的:投降按钮不显示时只排前 4 项,前 4 个位置保持不变。 + * + * 元素说明: + * - 花色按钮帧 = 花色序号 1–4,按【服务端 flower 编号】:帧1=方块♦ 帧2=梅花♣ + * 帧3=红心♥ 帧4=黑桃♠。⚠ 参考图上 4 个按钮自左向右显示为 ♠♥♣♦,与 flower 编号相反; + * 槽位与帧的对应由渲染代码决定,本文件只登记 4 个精灵、不预设槽位顺序。 + * - 「N对」= 该花色的对子数;「N张」= 该花色在庄家手中的总张数(两副牌单花色最多 26 张)。 + * 两者都【由前端据自己的 cards 本地统计】,协议明确服务端不额外下发。 + * - 「N张」用 SpriteManager.setNumberImage(spriteId, '26张', charWidth) 在【一个】精灵上 + * 显示整串,后缀「张」= 资源第 16 帧;不拆十位/个位(2026-08-26 定案,见下方空号说明)。 + * - 投降按钮仅 touxiang === 1(即叫分 70)时显示;点它直接跳到结算,不选主、不埋牌、不出牌。 + * - 交互:点花色 → xuanzhu { seat, flower };点投降 → touxiang { seat }。收包后才收面板。 + * - 【时序】收到 xuanzhu 推送后:顶部信息条「主」列显示花色图标 → 手牌按新主牌集合重排 + * (正2/正7 升格为主牌)→ 本面板收起 → 进入埋牌。 + * + * 资源说明: + * - 标题斜角条: EQW_Images.BAR_CHOOSE_MAIN (604), 1 帧, 425×50 + * - 花色/投降按钮: EQW_Images.BTN_SUIT_CHOOSE (533), 5 帧, 128×55 + * 帧1–4 = 四花色按钮(各含按钮底 + 花色图标 + 右上角蓝色角标底);帧5 = 投降按钮(含文字) + * - 张数数字: EQW_Images.NUM_MAIN_SUIT_COUNT (636), 16 帧固定帧序, 单字符 24×32, + * 整图 384×32, 第 16 帧 = 后缀「张」;charWidth 取 NUM_STYLE.MAIN_SUIT_COUNT.charWidth + * + * 精灵ID分配: 1650–1655 / 1668–1672 / 1674–1677(群组 221 号段 1650–1699) + * —— 中间的空号是美术改一张图 5 帧出图后作废的键,逐条追溯见下方原注释。 + * + * @see docs_dev/二七王-UI资源与精灵清单.md §1.5 选主·投降 / §5.4 / §6.8 + * @see docs_dev/uiref/亮主.png + */ //选主/投降面板:4 花色按钮 + 投降按钮(清单 §5.4,Layer 104 群组 221) // //以下键号在源清单中被显式判定「不需要」,本文件不占用,留空号以便追溯(美术改一张图 5 帧出图, @@ -123,6 +260,69 @@ EQW_Sprites.ChooseMainView = { } }; +// ============================================================================ +// 阶段操作条 - Layer 104 (ACTION), Group 222 (BURY_BAR) / 223 (PLAY_BAR) +// ============================================================================ + +/** + * 埋牌 / 出牌操作条 - OperationBarView + * + * 用途: 自己该行动时,在手牌区【上方】横排一条操作按钮。两条操作条按阶段【互斥】出现: + * 埋牌条只有庄家在埋牌阶段看得到,出牌条在出牌阶段轮到自己时出现。 + * 两条都把倒计时 CD_SELF 排在自己的 items 里,故倒计时随操作条一起移动。 + * + * 布局说明(参考图 docs_dev/uiref/庄家埋牌.png = 埋牌条;docs_dev/uiref/出牌.png = 出牌条): + * + * 埋牌操作条(群组 222,EQW_Layout.BURY_OPERATION_BAR) + * line/horizontal, anchor center, anchorX=640 anchorY=165, itemHeight=63, spacing=45 + * items 逐项不等宽:BURY_BTN_TIP 180 / CD_SELF 60 / BURY_BTN_SUBMIT 180 + * + * ┌────────────────┐ ┌────────────────┐ y=165 + * │ 提示 │ 12 │ 埋牌 (1/8) │ + * └────────────────┘ ↑ └────────────────┘ y=228 + * ↑ CD_SELF ↑ + * BURY_BTN_TIP(1700) BURY_BTN_SUBMIT(1702) + * +_TEXT(1701) +_TEXT(1703)「埋牌 (N/8)」 + * 帧1=可提交(金黄) / 帧2=灰(未满 8 张) + * + * ┌── 手牌【双排】(Layer 102,见 Sprites_Cards.js HandView)──┐ y=285 起 + * + * 出牌操作条(群组 223,EQW_Layout.PLAY_OPERATION_BAR) + * line/horizontal, anchor center, anchorX=640 anchorY=345, itemHeight=55, spacing=35 + * items:CD_SELF 75 / PLAY_BTN_SUBMIT 157 + * + * 20 ┌──────────────┐ y=345 + * ↑ │ 出 牌 │ + * CD_SELF └──────────────┘ y=400 + * ↑ PLAY_BTN_SUBMIT(1710)+_TEXT(1711) + * 帧1=可出 / 帧2=灰(选中牌数为 0 时) + * + * ┌── 手牌【单排】(Layer 102)──┐ y=455 起 + * + * 元素说明: + * - 埋牌条:N 为已选张数,N < 8 时提交按钮置灰;选中的牌在手牌区上浮表示待埋。 + * 提交后庄家手牌回到单排 28 张。 + * - 出牌条:点手牌选中(上浮)→ 点「出牌」→ 发 chupai { seat, cards }。 + * 【只发意图不发结论】——不回传牌型、不回传「我最大」之类判定;前端可用 shared/ 做本地 + * 预校验与提示,结果不回传。 + * - 【自动选中】服务端会在下发包里带「应当选中的牌」(mustcard, S-2),前端收到后自动把这些 + * 牌选中上浮,玩家确认后点「出牌」即可——方向是服务端→前端的建议,不违反红线。 + * - 【缺口】出牌阶段的「提示」按钮 PLAY_BTN_TIP(1712)/PLAY_BTN_TIP_TEXT(1713) 已登记精灵 + * (清单 §1.7 明确「出牌阶段必须有」),但参考图 出牌.png 里未画出, + * EQW_Layout.PLAY_OPERATION_BAR 的 items 也只排了倒计时与出牌两项—— + * 该按钮的位置【待设计稿】,补稿后在 items 里加一项即可,本文件不预设坐标。 + * + * 资源说明: + * - 提示按钮: EQW_Images.BTN_TIP (535), 1 帧, 180×63, 蓝色渐变(埋牌/出牌两条共用同一资源) + * - 埋牌按钮: EQW_Images.BTN_BURY (536), 2 帧, 180×63, 帧1=可提交 帧2=置灰 + * - 出牌按钮: EQW_Images.BTN_PLAY (537), 2 帧, 157×55, 帧1=可出 帧2=置灰 + * + * 精灵ID分配: 1700–1703(埋牌条)/ 1710–1713(出牌条) + * + * @see docs_dev/二七王-UI资源与精灵清单.md §1.6 埋牌 / §1.7 出牌对局 / §5.4 / §6.8 + * @see docs_dev/uiref/庄家埋牌.png + * @see docs_dev/uiref/出牌.png + */ //操作条:埋牌操作条(群组 222)+ 出牌操作条(群组 223),同一屏幕位置随阶段互斥展示(清单 §5.4) EQW_Sprites.OperationBarView = { Layer: EQW_Layers.ACTION, //104 @@ -146,6 +346,66 @@ EQW_Sprites.OperationBarView = { } }; +// ============================================================================ +// 倒计时 - Layer 104 (ACTION), Group 224 (COUNTDOWN) +// ============================================================================ + +/** + * 倒计时 - CountdownView + * + * 用途: 把当前操作者剩余的秒数显示在【他自己的位置旁】。三家各一个精灵, + * 按当前操作者显隐其一——所以看到数字在哪儿,就知道在等谁。 + * + * 布局说明(参考图:等待叫分.png 的「12」在左上家、出牌2.png 的「15」在左上家、 + * 自己叫分.png 的「12」在不叫按钮左侧、庄家埋牌.png 的「12」在操作条中间): + * + * ┌──────────────────────────────────────────────────────────────┐ y=0 + * │ ┌ 顶部信息条 ┐ │ + * │ ┌────┐ ┌────┐ │ + * │ │头像│ 12 15 │头像│ │ y≈165 + * │ └────┘ ↑ ↑ └────┘ │ + * │ CD_LEFT(1150) CD_RIGHT(1151) │ + * │ point(195,165) point(1010,165) │ + * │ │ + * │ 20 ┌──────────┐ │ y≈345 + * │ ↑ │ 出 牌 │ │ + * │ CD_SELF └──────────┘ │ + * │ (1152) │ + * └──────────────────────────────────────────────────────────────┘ y=720 + * + * ⚠ 左右两家的倒计时与该家的状态文字(P_LEFT/RIGHT_STATUS_TEXT,见 Sprites_Table.js) + * 落在【同一块区域】:轮到他时显示秒数,他表态后显示「60分」/「不叫」,两者不共存。 + * + * CD_SELF 一个精灵、三处落点,由当前阶段的布局节点决定: + * 叫分阶段 → EQW_Layout.P_COUNTDOWN.SELF = point(445, 345)(不叫按钮左侧) + * 埋牌阶段 → EQW_Layout.BURY_OPERATION_BAR 的 items 第 2 项(提示与埋牌之间,y=165) + * 出牌阶段 → EQW_Layout.PLAY_OPERATION_BAR 的 items 第 1 项(出牌按钮左侧,y=345) + * 选主阶段 → 参考图 亮主.png 显示在「亮主」标题条内、标题文字右侧(布局节点待补) + * + * 元素说明: + * - 三个精灵均为【多帧图数字精灵】而非文字精灵(2026-08-27 订正):玩家视线焦点、视觉权重 + * 最高的数字,参考图是带描边/渐变的美术字,文字精灵做不出这个效果。 + * 显示走 SpriteManager.setNumberImage(spriteId, '15', charWidth),纯秒数、无后缀。 + * - 布局节点 EQW_Layout.P_COUNTDOWN 的 h 恒取 NUM_STYLE.COUNTDOWN.charHeight(SSOT), + * w 留到运行时注入——setNumberImage 会按【字符数 × charWidth】自动改精灵宽。 + * - 数据来源:各包的 countdown 字段。 + * - 【只做展示,不触发任何操作】倒计时归零后不自动叫分/选主/埋牌/出牌,也不判负、不跳过; + * 前端不得在归零时做任何乐观界面推进(不跳阶段、不清控制权),一切仍等服务端推送。 + * 超时裁定在服务端,前端只做插值显示。 + * - 【归零后停在 0 继续显示,不隐藏】——隐藏会被误读为「已超时 / 已跳过」。 + * + * 资源说明: + * - 数字: EQW_Images.NUM_COUNTDOWN (631), 16 帧固定帧序 0123456789.+-x/p, + * 单字符 44×60, 整图 704×60;帧11–15 本套用不到但必须留占位,帧16 出空白(无后缀) + * - charWidth / charHeight 只在 EQW_Layout.NUM_STYLE.COUNTDOWN 定义一处,业务代码只引用 + * + * 精灵ID分配: 1150–1152(群组 224 号段 1150–1159) + * + * @see docs_dev/二七王-UI资源与精灵清单.md §2.4 倒计时 / §5.4 / §6.8 + * @see docs_dev/uiref/等待叫分.png + * @see docs_dev/uiref/自己叫分.png + * @see docs_dev/uiref/庄家埋牌.png + */ //倒计时:左上家/右上家/自己 三处操作区倒计时(清单 §5.4,Layer 104 群组 224) // //三处均为【多帧图数字精灵】(非文字精灵):玩家视线焦点、视觉权重最高的数字,参考图是带描边/渐变 @@ -164,6 +424,86 @@ EQW_Sprites.CountdownView = { } }; +// ============================================================================ +// 桌面浮层 - Layer 105 (OVERLAY), Group 230 (OVERLAY) +// ============================================================================ + +/** + * 桌面浮层 - OverlayView + * + * 用途: 盖在牌桌之上的一次性/短时表现层,三类互不相干的东西共用一个群组: + * (1) 闲家提示气泡 (2) 捡分飘字 (3) 通用状态提示条。 + * 都是「浮」在桌面上、不属于任何固定面板的元素,故集中在 Layer 105。 + * + * 布局说明(参考图:自己是闲家时,底下的踩有分没分按钮.png = 气泡入口; + * 出牌2.png 中央的「20分」= 捡分飘字;强甩失败提示.png / 等待庄家选主.png = 提示条): + * + * ┌──────────────────────────────────────────────────────────────┐ y=0 + * │ ┌ 顶部信息条 ┐ │ + * │ ┌────┐ ┌────┐ │ + * │ │头像│(踩) (踩)│头像│ │ y≈122 + * │ └────┘ ↑ ↑ └────┘ │ + * │ BUBBLE_TISHI_LEFT(1750) BUBBLE_TISHI_RIGHT(1751) │ + * │ 箭头向左(帧1–3) 箭头向右(帧4–6) │ + * │ │ + * │ ┌────────────────────────────────┐ │ y=172 + * │ │ 强 甩 失 败 │ ← TOAST_INSTANT│ 462,363×50 + * │ └────────────────────────────────┘ │ + * │ ┌──────────────┐ │ y=180 + * │ │ 20分 │ ← GRADE_FLOAT │ 570,170×55 + * │ └──────────────┘ │ + * │ │ + * │ ┌────────────────────────────┐ │ y=373 + * │ │ 等待庄家选主 │ ← TOAST_WAIT │ 500,320×47 + * │ └────────────────────────────┘ │ + * └──────────────────────────────────────────────────────────────┘ y=720 + * + * (1) 提示气泡 BUBBLE_TISHI_LEFT/RIGHT/SELF (1750–1752) + * EQW_Layout.TISHI_BUBBLE, attach 平台头像框, 96×44(尺寸为占位估值,资源待定稿): + * LEFT → attach P_LEFT_AVATAR(379) right/middle, offsetX=+10, arrowRight=false + * RIGHT → attach P_RIGHT_AVATAR(377) left/middle, offsetX=-10, arrowRight=true + * SELF → attach P_SELF_AVATAR(376) right/top, offset(+10,-70), arrowRight=false + * 帧 = (arrowRight ? 3 : 0) + tip,tip:1踩 2没分 3有分。 + * 【朝向是配置项 arrowRight,不按座位硬判】——头像在气泡左侧就用箭头向左的帧。 + * (2) 捡分飘字 GRADE_FLOAT_BG(1755) + GRADE_FLOAT_TEXT(1756) + * EQW_Layout.GRADE_FLOAT = point(570, 180, 170×55) 为【起始】位置; + * 上飘与时长见 EQW_Anim.SCORE_FLOAT = { rise: -60, duration: 800 }(SSOT,布局里不重复)。 + * (3) 通用状态提示条 BAR_TOAST(1760) + TXT_TOAST(1761) + * 整局【复用同一套精灵】,只换文案与位置预设,两个预设二选一: + * 等待类(常驻到状态结束)→ EQW_Layout.TOAST_WAIT = point(500, 373, 320×47) + * 即时反馈类(自动淡出) → EQW_Layout.TOAST_INSTANT = point(462, 172, 363×50) + * 自动消失时长见 EQW_Anim.TOAST_DURATION = 1500(SSOT)。 + * + * 元素说明: + * - 【提示条文案共 3 条,T-33 已定案】: + * 「等待庄家选主」 状态类,两个闲家可见,收 shangzhuang 后 → 收 xuanzhu 前 + * 「等待庄家埋牌」 状态类,两个闲家可见,收 xuanzhu 后 → 收 maipai 前 + * 「强甩失败」 即时反馈,全场可见,收到 chupai1.shuaicuo == 1 时,自动淡出 + * 明确【不做】:叫分等待 / 出牌等待(倒计时已指明在等谁)、准备等待(平台自带标识)、 + * 掉线重连提示(平台已覆盖)、开底提示(画面本身已说清楚)。文案表进配置,不写死字符串。 + * - 【甩错 D-3 已定】不做收回动画——甩出的牌不演「飞回手里」,直接按服务端下发的 cards + * (被强制打出的最小主牌单张)落牌即可,另配一条「强甩失败」提示。 + * - 【气泡的受控例外】服务端只把提示转发给对家、不回执给发送者,所以发送者【自己的气泡由 + * 前端在点击时本地回显】。这是「悲观 UI」红线的一处受控例外,成立理由是提示不含任何对局 + * 状态、不改阶段/控制权/分数,服务端也明确不校验其真实性;失败回包到达时须撤掉本地回显。 + * 本人看不到自己的气泡(BUBBLE_TISHI_SELF 是给对家看的,见清单 §6.6)。 + * - 【报无主 D-4 已定】不做全场提示,唯一界面变化是他家的主N/对N 角标出现(PlayerMarkView)。 + * + * 资源说明: + * - 气泡: EQW_Images.BUBBLE_TISHI (651), 6 帧 (3×2), 尺寸待定 + * 帧1=踩·左 帧2=没分·左 帧3=有分·左 / 帧4=踩·右 帧5=没分·右 帧6=有分·右 + * - 提示条底: EQW_Images.BAR_TOAST (653), 1 帧, 363×50, 可九宫拉伸(按文案长度变宽) + * - 捡分飘字底: EQW_Images.TXT_GRADE_FLOAT (654), 1 帧, 尺寸待定 + * + * 精灵ID分配: 1750–1752 / 1755–1756 / 1760–1761(群组 230 号段 1750–1799) + * —— 中间空号(1753/1754/1757/1758/1759)是清单显式判定「不需要」的键,见下方原注释。 + * + * @see docs_dev/二七王-UI资源与精灵清单.md §2.8 状态提示条 / §1.7 闲家提示·甩错 / §5.5 / §6.8 + * @see docs_dev/uiref/自己是闲家时,底下的踩有分没分按钮.png + * @see docs_dev/uiref/强甩失败提示.png + * @see docs_dev/uiref/等待庄家选主.png + * @see docs_dev/uiref/出牌2.png + */ //桌面浮层:提示气泡 + 通用状态提示条 + 捡分飘字(清单 §5.5,Layer 105 群组 230) // //以下键号在源清单中被显式判定「不需要」,本文件不占用,留空号以便追溯: