From 6c339060bf621bafbb491406877f5983870a4e1c Mon Sep 17 00:00:00 2001 From: Joywayer Date: Thu, 27 Aug 2026 01:51:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E4=B8=83=E7=8E=8B=EF=BC=9ASprites=5FR?= =?UTF-8?q?esult.js=20=E8=A1=A5=205=20=E4=B8=AA=20View=20=E7=9A=84?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E8=AF=B4=E6=98=8E=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为 AsetResultView / ChongGuanOverlayView / AccountView / HistoryView / MingPaiView 各补一块 JSDoc:分区标题标出 Layer 与 Group,正文含 ASCII 版式图 (小局结算三家光晕与底牌算式区、冲关叠加层三家牌位与遮罩、大局结算面板的 标题栏/玩家栏/规则栏/面板外按钮条、出牌历史与明牌的三排/两排版式), 另附元素说明、关闭方式对照、资源说明、精灵 ID 分配与 @see 出处。 纯注释改动,数据部分一字未动(精灵总数仍 378、布局节点仍 61)。 如实记下三处待补:判定结果动画 D-8 无设计稿;AccountView / HistoryView / MingPaiView 尚无 EQW_Layout 布局节点,图中坐标为参考图目视实测。 Co-Authored-By: Claude Opus 5 (1M context) --- .../01_SubGame/codes/config/Sprites_Result.js | 334 ++++++++++++++++++ 1 file changed, 334 insertions(+) diff --git a/client/js/01_SubGame/codes/config/Sprites_Result.js b/client/js/01_SubGame/codes/config/Sprites_Result.js index 5b3a1a4..4523d30 100644 --- a/client/js/01_SubGame/codes/config/Sprites_Result.js +++ b/client/js/01_SubGame/codes/config/Sprites_Result.js @@ -7,6 +7,92 @@ // 连号精灵逐条写全,不用循环生成。 var EQW_Sprites = EQW_Sprites || {}; +// ============================================================================ +// 小局结算面板 - Layer 302 (POPUP_ASET_RESULT), Group 240 (ASET_RESULT) +// ============================================================================ + +/** + * 小局结算面板 - AsetResultView + * + * 用途: 一小局打完后盖在牌桌之上,展示【埋牌底牌 + 扣底算式】与【三家得分】, + * 并给出「冲关牌型」「下一局」两个出口。本面板没有整块面板底图—— + * 各元素直接摆在半透牌桌上(见参考图,牌桌仍隐约可见)。 + * + * 布局说明(参考图 docs_dev/uiref/小局结算.png): + * + * ┌ 175,150 ─────────┐ ┌ 430,140 ────────────────┐ ┌ 865,150 ─────────┐ + * │ │ │ ┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐ │ │ │ + * │ +20 │ │ └┘└┘└┘└┘└┘└┘└┘└┘ ×8 │ │ -10 │ + * │ │ │ 叫分2子 底牌 20x0 │ │ │ + * └──────────────────┘ └─────────────────────────┘ └──────────────────┘ + * 牌局分 10 冲关分 10 牌局分 -5 冲关分 -5 + * ↑ ↑ ↑ ↑ + * RESULT_JF_LEFT RESULT_AW_LEFT RESULT_JF_RIGHT RESULT_AW_RIGHT + * (1808) (1811) (1809) (1812) + * + * ┌ 490,340 ─────────┐ + * │ -10 │ ← RESULT_GLOW_SELF(1804) 光晕 225×100 + * └──────────────────┘ RESULT_SCORE_SELF(1807) 总分大字 + * 牌局分 -5 冲关分 -5 RESULT_JF_SELF(1810) / RESULT_AW_SELF(1813) + * + * ┌ 535,515 ────┐ ┌ 835,518 ───┐ + * │ 冲关牌型 │ │ 下一局 │ + * └─────────────┘ └────────────┘ + * ↑ RESULT_BTN_CG(1815) ↑ RESULT_BTN_NEXT(1817) + * +_TEXT(1816) 183×63 +_TEXT(1818) 180×65 + * + * 三家的位置与牌桌上各自的座位方位一致:左上家在左、右上家在右、自己在中央偏下。 + * 底牌区面板 RESULT_BOTTOM_PANEL(1800) = point(430,140,420×148), + * 内含群组 215 的 8 张埋牌底牌(BuryCardsView,见 Sprites_Cards.js)与 + * RESULT_BOTTOM_TEXT(1801)(attach 面板 center/bottom, offsetY=-14)。 + * + * 每家一组三个数字(EQW_Layout.RESULT_GLOW / RESULT_SCORE_NUM / RESULT_JF_TEXT / + * RESULT_AW_TEXT,都用 bySeat 三变体): + * ┌───── 光晕 225×100 ─────┐ + * │ +20 │ ← 总分大字:attach 光晕 center/middle + * └────────────────────────┘ + * 牌局分 10 冲关分 10 + * ↑ attach 光晕 left/bottom ↑ attach 光晕 right/bottom + * offset(-15,+24) offset(+15,+24) + * + * 元素说明: + * - 光晕帧: GLOW_RESULT 帧1=赢(橙) / 帧2=输(蓝),按该家 grade 的正负取帧。 + * - 总分大字: 取 aset.seatlist[i].grade,正分橙带「+」、负分蓝带「-」; + * 按符号在 NUM_RESULT_WIN / NUM_RESULT_LOSE 两套资源里二选一绑定, + * 显示用 SpriteManager.setNumberImage(spriteId, '+20', charWidth)。 + * 与大局结算的 ACC_TPL_SCORE_NUM(1914) 同一套资源与用法,两处得分显示保持一致。 + * - 扣底文案: 格式「叫分{aset.multiple}子 底牌 {bottom.grade1}x{bottom.multiple}」—— + * x 后面是【扣底倍数】(单张 ×1、主对 ×2、N 连对 ×2N)。闲家未扣底时 bottom 只有 cards, + * multiple/grade1/grade2 都不下发 → 倍数位显示 0(参考图的「底牌 20x0」即此情形)。 + * - 【标签文案与字段】参考图两个小字标签已定案为「牌局分」/「冲关分」(清单 §1.8): + * 牌局分取 grade_jf(捡分子数得分)、冲关分取 grade_cg(算奖里的冲关分量,S-6 新增, + * 开傍王时不含傍王那部分)。精灵键名沿用早期的 _JF / _AW,与文案不完全同名,勿混。 + * - 【判定结果不在本面板显示,D-8】大光/小光/过庄/升N级/投降由【动画】呈现, + * 故 1814 RESULT_JUDGE_TEXT 被判定不需要(见下方空号说明)。动画在两个时机播: + * 对局过程中 —— 依 curmultiple(随 chupai1/2/3 下发,带符号,S-8)档位跳变时提示 + * 结算前 —— 依 aset.upgrade(带符号:3大光 2小光 1过庄 -N升N级 -99投降 0解散) + * 末轮打完、本面板出现【之前】播一次最终判定 + * 【待设计稿】动画资源 EQW_Images.ANI_JUDGE(634) 帧数/尺寸待定, + * 播放参数在 EQW_Anim 里留白(AnimConstants.js 末尾「D-8 待补」)——本 View 无对应精灵。 + * - 【容错】投降结算只有 aset、无 chupai 无 bottom → 面板必须容忍底牌区缺失, + * 不能因读不到 bottom.cards 就崩或显示空框。 + * - 【时序】先 setXxx 把结算数据写进 this.data、再播动画;动画的开始/结束/出错回调里 + * 只刷界面、不写核心数据。动画缺失或卡住时,面板与数据仍须正确。 + * + * 资源说明: + * - 底牌区面板底: EQW_Images.PANEL_BOTTOM_CARDS (606), 1 帧, 420×148 + * - 分数光晕: EQW_Images.GLOW_RESULT (607), 2 帧, 225×100, 帧1=赢(橙) 帧2=输(蓝) + * - 得分数字: EQW_Images.NUM_RESULT_WIN (632) / NUM_RESULT_LOSE (633), + * 各 16 帧固定帧序, 单字符 46×62, 整图 736×62;帧12=「+」帧13=「-」必出; + * charWidth 取 EQW_Layout.NUM_STYLE.RESULT_WIN / RESULT_LOSE.charWidth + * - 冲关牌型按钮: EQW_Images.BTN_CG_CARDS (542), 1 帧, 183×63, 蓝色渐变 + * - 下一局按钮: EQW_Images.BTN_NEXT_ASET (541), 1 帧, 180×65, 金黄渐变 + * + * 精灵ID分配: 1800–1813 / 1815–1818(群组 240);埋牌底牌 8 张复用群组 215(1258–1265) + * + * @see docs_dev/二七王-UI资源与精灵清单.md §1.8 末轮扣底 + 小局结算 / §5.6 / §6.9 + * @see docs_dev/uiref/小局结算.png + */ //小局结算面板(清单 §5.6,Layer 302 群组 240) // //以下键号在源清单中被显式判定「不需要」,本文件不占用,留空号以便追溯: @@ -52,6 +138,67 @@ EQW_Sprites.AsetResultView = { }; //> 底牌 8 张精灵复用 Sprites_Cards.js 群组 215(BuryCardsView.BuryCards,1258–1265),不在此重复。 +// ============================================================================ +// 冲关牌型叠加层 - Layer 302 (POPUP_ASET_RESULT), Group 244 (CHONGGUAN) +// ============================================================================ + +/** + * 冲关牌型叠加层 - ChongGuanOverlayView + * + * 用途: 在小局结算面板【之上】再盖一层半透黑遮罩,三家各摊开自己参与冲关的牌 + * (aset.seatlist[i].cards),并在旁边标出奖数。点「冲关牌型」按钮打开。 + * + * 布局说明(参考图 docs_dev/uiref/冲关牌型显示.png;牌的排布见 + * EQW_Layout.CHONGGUAN_FAN: fan/horizontal, anchor center, + * 牌尺寸 CARD_SIZE.L 110×190, maxWidth=420, spacingMax=-40 spacingMin=-88): + * + * ┌──────────────────────────────────────────────────────────────┐ y=0 + * │ ┌──┬──┬──┬────┐ ┌──┬──┬──┬────┐ │ + * │ │K │K │K │ K │ │K │K │K │ K │ │ 260,120 / 1035,120 + * │ └──┴──┴──┴────┘ └──┴──┴──┴────┘ │ + * │ CG_BOX_LEFT(1821) CG_BOX_RIGHT(1822) │ + * │ CG_COUNT_LEFT(1825) CG_COUNT_RIGHT(1826)│ + * │ │ + * │ (半透黑遮罩 CG_MASK(1820) 铺满全屏) │ + * │ │ + * │ ┌──┬──┬──┬────┐ │ + * │ │K │K │K │ K │ ← CG_BOX_SELF(1823) 640,400│ + * │ └──┴──┴──┴────┘ CG_COUNT_SELF(1827) │ + * │ │ + * │ ┌────────────┐ │ + * │ │ 下一局 │ ← 遮罩之上│ 835,518 + * │ └────────────┘ 仍可见可点│ + * └──────────────────────────────────────────────────────────────┘ y=720 + * + * 三家牌位与结算面板同方位:左上家、右上家在各自头像内侧,自己在中央偏下。 + * 遮罩 EQW_Layout.CG_MASK = point(0,0,1280×720, opacity 0.72)。 + * + * 元素说明: + * - 【牌用精灵复制,不预置固定张数】cards 长度不定——四王 + 一条长连对链 + 八个 7 + + * 八个 2 叠加时可达 20 余张,预置既可能不够、又在多数局里白占 ID。 + * 编辑器里只需建 5 个精灵:3 个容器 + 1 个牌模板 + 1 个遮罩;奖数文字 3 个照常预置。 + * 生成方式见下方原注释与清单 §5.6a 的代码片段(SpriteCopyUtils.create + setFrame)。 + * - 【清理是硬要求】关闭叠加层 / 组件 onDestroy 时必须 + * SpriteCopyUtils.removeRange(boxId, 0, cards.length),否则复制精灵残留。 + * - 【关闭方式】遮罩本身就是关闭热区,点遮罩即关闭,不另设关闭按钮 → + * CG_MASK 必须注册点击事件;同时 RESULT_BTN_NEXT(1817/1818) 的层内层级须【高于】遮罩, + * 点它不被遮罩吃掉(「冲关牌型」按钮本身被遮住则无妨)。 + * ⚠ 三个遮罩面板的关闭方式各不相同,别写混: + * 冲关牌型(本 View)→ 点遮罩关闭 遮罩可点 + * 明牌 / 出牌历史 → 点遮罩关闭,明牌另可再点按钮切换 遮罩可点 + * 亮牌 → 仅自动时长,到点自动收起 遮罩【不】注册点击 + * - 奖数取 aset.seatlist[i].naward(该家总奖数,支付基数);chongguan / wang 可作明细选展。 + * 前端【不重算冲关】,一律直接取服务端下发值。 + * + * 资源说明: + * - 遮罩: EQW_Images.MASK_DIM (609), 1 帧, 纯色可拉伸(出 1 张小图即可,拉伸满 1280×720) + * - 牌模板: EQW_Images.CARD_FACE_L (501), 60 帧, 单帧 110×190 + * + * 精灵ID分配: 1820–1827(群组 244) + * + * @see docs_dev/二七王-UI资源与精灵清单.md §1.8「冲关」是什么 / §5.6a / §6.7 + * @see docs_dev/uiref/冲关牌型显示.png + */ //冲关牌型叠加层(清单 §5.6a,Layer 302 群组 244,精灵复制)—— //本层的牌用 SpriteCopyUtils 运行时复制,不预置固定张数(cards 长度不定,最多可达 20 余张)。 //编辑器里只需建 5 个精灵(3 容器 + 1 牌模板 + 1 遮罩);奖数文字 3 个照常预置。 @@ -76,6 +223,81 @@ EQW_Sprites.ChongGuanOverlayView = { } }; +// ============================================================================ +// 大局总结算 / 解散结算 - Layer 303 (POPUP_ACCOUNT), Group 241 (ACCOUNT) +// ============================================================================ + +/** + * 大局总结算 / 解散结算 - AccountView + * + * 用途: 打完最后一局(或房间解散)时弹出的总账面板:标题栏 + 三条玩家栏 + 规则栏, + * 面板【外】底部另有 4 个功能按钮。解散结算复用同一面板,只是 aset 各项为 0。 + * + * 布局说明(参考图 docs_dev/uiref/大局结算.png;面板居中于 1280×720, + * 实测约 x≈80–1180, y≈88–620,按钮条 y≈640–700): + * + * ┌──────────────────────────────────────────────────────────┐ ← ACC_TITLE_BAR(1901) + * │ 二七王-3人 房号654216 共24局 2025-12-14 11:45 [×] │ 1100×56,青绿底 + * ├──────────────────────────────────────────────────────────┤ ↑ACC_TITLE_TEXT(1902) + * │ │ ↑ACC_BTN_CLOSE(1903) + * │ ⑴ [头像] 玩家1 基础分30 算奖分12 傍王分15 +135 │ ← 玩家栏(复制生成) + * │ ID:100001 总得分30 │ + * │ ──────────────────────────────────────────────────────── │ ← ACC_TPL_DIVIDER(1915) + * │ ⑵ [头像] 玩家2 基础分-30 算奖分-12 傍王分-15 -45 │ + * │ ID:100002 总得分-30 │ + * │ ──────────────────────────────────────────────────────── │ + * │ ⑶ [头像] 玩家3 …… -45 │ + * │ │ + * ├──────────────────────────────────────────────────────────┤ ← ACC_RULE_BAR(1904) + * │ 规则:可查牌、傍王、爬坡算子 │ 1100×62,浅绿底 + * └──────────────────────────────────────────────────────────┘ ↑ACC_RULE_TEXT(1905) + * ↑ ACC_PANEL_BG(1900) 圆角浅灰绿 1100×540(标题栏与规则栏是它的上下封边) + * + * ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ← 面板【外】底部 + * │ 再来一局 │ │ 分享好友 │ │ 复制战绩 │ │ 退出房间 │ 各 190×60 + * └──────────┘ └──────────┘ └──────────┘ └──────────┘ + * (1920/21) (1922/23) (1924/25) (1926/27) + * 黄 蓝 蓝 红 + * + * 单条玩家栏的列序(左→右): + * 名次徽章 → 头像 → 昵称 /「ID:{playerid}」(两行) → 「基础分{n}」/「总得分{n}」(两行) + * → 「冲关分{n}」→「傍王分{n}」→ 右侧总分大字 + * ⚠ 参考图第三列小字写的是「算奖分」,清单 §1.9 定案的字段是 grade_cg_total(冲关分); + * 四项 grade_jf_total / grade_cg_total / grade_bw_total 之和恒等于 score(S-6)。 + * + * 元素说明: + * - 【玩家栏用精灵复制】三条结构完全相同、仅数据不同,用 SpriteCopyUtils 从 5 个模板 + * (ACC_TPL_RANK / AVATAR / TEXT / SCORE_NUM / DIVIDER)复制生成;面板外壳与按钮预置。 + * tag 分段见下方原注释;关闭面板时按各段 removeRange 清理。 + * - 名次徽章按总分排名取帧(1金 / 2橙 / 3蓝,花瓣形)。 + * - 总分大字与小局结算的 RESULT_SCORE_* 同一套资源与用法:正分橙带「+」、负分蓝带「-」, + * setNumberImage 走 TEXT/WIDTH 属性,_validateSpriteId 也接受复制精灵的字符串 ID, + * 故复制出来的玩家栏总分同样【一个精灵显示整串】。 + * - 规则栏文案据 roomtype 位串拼出已启用项,不硬编码。 + * - 【解散结算】投递方式与小局结算完全不同(协议 §14.1):rpc 是平台的 free_room、 + * route 是 room,真实取值路径是 data.deskfree.data.aset / .account(多一层 data 包装), + * 且 data.deskfree 可能缺失(开战后、首局发牌前解散)→ 前端必须容忍。 + * 解散的申请/投票/同意拒绝界面【由平台全包】(Layer 420),子游戏不做投票界面。 + * - 【无布局节点·待补】Layout_Result.js 目前只配了小局结算与冲关遮罩,本 View 的 + * ACC_* 一个布局节点都没有——上图坐标是参考图目视实测,尚未落进 EQW_Layout。 + * 实现前须先补齐布局配置,不得在渲染代码里就地硬编码坐标(零裸值红线)。 + * + * 资源说明: + * - 面板底: EQW_Images.PANEL_ACCOUNT (610), 1 帧, 1100×540, 圆角浅灰绿 + * - 标题栏: EQW_Images.BAR_ACCOUNT_TITLE (611), 1 帧, 1100×56, 青绿底含圆角上沿 + * - 规则栏: EQW_Images.BAR_ACCOUNT_RULE (612), 1 帧, 1100×62, 浅绿底含圆角下沿 + * - 关闭钮: EQW_Images.BTN_ACC_CLOSE (547), 1 帧, 36×36 + * - 名次徽章: EQW_Images.BADGE_RANK (579), 3 帧, 44×44, 帧=名次 1–3 + * - 分隔线: EQW_Images.LINE_DIVIDER (613), 1 帧, 1060×2 + * - 总分数字: EQW_Images.NUM_RESULT_WIN (632) / NUM_RESULT_LOSE (633), 16 帧, 单字符 46×62 + * - 四个按钮: EQW_Images.BTN_ACCOUNT_AGAIN (543) / SHARE (544) / COPY (545) / EXIT (546), + * 各 1 帧, 190×60 + * + * 精灵ID分配: 1900–1905 / 1910–1915 / 1920–1927(群组 241) + * + * @see docs_dev/二七王-UI资源与精灵清单.md §1.9 大局总结算 / §1.10 解散结算 / §5.7a + * @see docs_dev/uiref/大局结算.png + */ //大局总结算 / 解散结算(清单 §5.7a,Layer 303 群组 241,玩家栏用精灵复制)—— //三条玩家栏结构完全相同、仅数据不同,用 SpriteCopyUtils 复制生成;面板外壳与按钮预置。 //tag 分段(SpriteCopyUtils.createTagManager):rank 1–20 / avatar 21–40 / text 41–140(每行 6 条文字)/ score 141–160 / divider 161–180。 @@ -118,6 +340,68 @@ EQW_Sprites.AccountView = { } }; +// ============================================================================ +// 出牌历史 / 上一轮 / 亮牌 - Layer 304 (POPUP_HISTORY), Group 242 (HISTORY) +// ============================================================================ + +/** + * 出牌历史 / 上一轮 / 亮牌 - HistoryView + * + * 用途: 半透黑遮罩 + 每家一排牌的查看面板,【一套精灵三种用途】,只换数据源: + * 出牌历史 = pushlist 全部轮次摊平聚合到各家,三排 + * 上一轮 = pushlist 末尾一项,三排 + * 亮牌 = liangpai.cards(庄家的固定主牌),只用一排 + * + * 布局说明(版式照 docs_dev/uiref/冲关牌型显示.png——本 View 与 MingPaiView、 + * ChongGuanOverlayView 三者是同一种版式:遮罩 + 每家一排重叠排列的大牌): + * + * ┌──────────────────────────────────────────────────────────────┐ y=0 + * │ ┌──┬──┬──┬──┬────┐ ┌──┬──┬──┬──┬────┐ │ + * │ │K │K │K │K │ K │ │K │K │K │K │ K │ │ + * │ └──┴──┴──┴──┴────┘ └──┴──┴──┴──┴────┘ │ + * │ ↑CG_BOX 位同左上家 ↑位同右上家 │ + * │ HIST_BOX_LEFT(1951) HIST_BOX_RIGHT(1952) │ + * │ HIST_LABEL_LEFT(1955) HIST_LABEL_RIGHT(1956)│ + * │ │ + * │ (半透黑遮罩 HIST_MASK(1950) 铺满全屏,兼关闭热区)│ + * │ │ + * │ ┌──┬──┬──┬──┬────┐ │ + * │ │K │K │K │K │ K │ ← HIST_BOX_SELF(1953) │ + * │ └──┴──┴──┴──┴────┘ HIST_LABEL_SELF(1957) │ + * └──────────────────────────────────────────────────────────────┘ y=720 + * + * 三排的落点与各自座位方位一致(左上家在左、右上家在右、自己中央偏下), + * 与 ChongGuanOverlayView 同构;【亮牌】只显示庄家那一排,其余两个容器隐藏。 + * + * 元素说明: + * - 【牌用精灵复制】张数不定(出牌历史摊平后可达整手 28 张以上), + * 编辑器里只建 1 个遮罩 + 3 个容器 + 1 个牌模板 + 3 个座位标签文字。 + * 关闭 / onDestroy 时必须 removeRange 清理复制精灵。 + * - 出牌历史与上一轮【仅可查牌模式】;不可查牌模式下底栏那两个按钮整体不出现。 + * 数据在出牌过程中由前端逐包(chupai1/2/3)自行累积,重连时从 pushlist 恢复。 + * - 出牌历史【不按轮次分组】(D-7 已定):每家出过的牌全部摊平聚合到该玩家名下, + * 再按手牌那套主牌序排序,三家各一排。前端自行摊平 + 排序,不需要改服务端。 + * - 【亮牌的关闭方式与其余两个面板不同】:只按自动时长关闭 + * (EQW_Anim.LIANGPAI_AUTO_CLOSE = 3000,清单原文时长「默认值待定」,现值为起始估值), + * 遮罩【不注册点击事件】;而出牌历史 / 上一轮是点遮罩关闭。同一批精灵、两种关闭策略, + * 实现时按用途分别挂事件,别写混。 + * - 【亮牌时机 T-34 已定】埋牌后、出牌前——庄家埋牌完成、服务端下发 maipai 包(带 liangpai) + * 时弹出,出牌开始前收起;只有【闲家】会收到并弹出,庄家自己不弹。 + * 一次性弹出、不是常驻入口;不阻塞出牌,若面板还开着就收到出牌推送,直接收起即可。 + * - 【与 MingPaiView 的关系】版式相同、渲染逻辑可共用,但数据独立、图层不同 + * (304 vs 305),故拆成两个 View——一个 View 恰好一个图层。 + * - 【无布局节点·待补】Layout_*.js 里没有 HIST_* 布局节点;牌排可参照 + * EQW_Layout.CHONGGUAN_FAN 的同构参数,实现前须补齐配置,不在渲染代码里硬编码坐标。 + * + * 资源说明: + * - 遮罩: EQW_Images.MASK_DIM (609), 1 帧, 纯色可拉伸(与冲关/明牌共用) + * - 牌模板: EQW_Images.CARD_FACE_L (501), 60 帧, 单帧 110×190 + * + * 精灵ID分配: 1950–1957(群组 242) + * + * @see docs_dev/二七王-UI资源与精灵清单.md §1.6 亮牌 / §1.7 出牌历史 / §5.7b + * @see docs_dev/uiref/冲关牌型显示.png + */ //出牌历史 / 上一轮 / 亮牌(清单 §5.7b,Layer 304,群组 242,牌用精灵复制)—— //三家都显示,数据 = pushlist 摊平聚合到各家(§1.7 D-7);上一轮同一套精灵,只取 pushlist 末尾一项; //亮牌只显示一排(庄家固定主牌),数据 = liangpai.cards(§1.6),复用同一套遮罩+容器+牌模板,仅数据源与排数不同。 @@ -140,6 +424,56 @@ EQW_Sprites.HistoryView = { } }; +// ============================================================================ +// 明牌面板 - Layer 305 (POPUP_MINGPAI), Group 243 (MINGPAI) +// ============================================================================ + +/** + * 明牌面板 - MingPaiView + * + * 用途: 半透黑遮罩 + 【另两家】各一排牌,展示他们手中全部未出主牌的具体牌面。 + * 与 HistoryView 版式相同,差别只在数据源与家数(明牌只看他家,没有自己那排)。 + * + * 布局说明(版式照 docs_dev/uiref/冲关牌型显示.png,去掉中央偏下的自己那一排): + * + * ┌──────────────────────────────────────────────────────────────┐ y=0 + * │ ┌──┬──┬──┬──┬────┐ ┌──┬──┬──┬──┬────┐ │ + * │ │K │K │K │K │ K │ │K │K │K │K │ K │ │ + * │ └──┴──┴──┴──┴────┘ └──┴──┴──┴──┴────┘ │ + * │ ↑ MING_BOX_A(2001) ↑ MING_BOX_B(2002) │ + * │ MING_LABEL_A(2004) MING_LABEL_B(2005) │ + * │ │ + * │ (半透黑遮罩 MING_MASK(2000) 铺满全屏,兼关闭热区) │ + * │ │ + * │ (自己那排不存在——自己的牌自己看得见) │ + * │ │ + * └──────────────────────────────────────────────────────────────┘ y=720 + * + * A / B 两个容器分别落在两个他家的方位(左上 / 右上),与 HistoryView 的 + * HIST_BOX_LEFT / HIST_BOX_RIGHT 同位;牌用 CARD_FACE_L 重叠排列(fan)。 + * + * 元素说明: + * - 【按钮显示条件 D-6 已定,按 design 手册】可查牌模式 + 出牌阶段 + + * 【场上已有任一玩家报无主】(baozhu == 1) → 三家都显示「明牌」按钮,可随时查看、不限次数。 + * 判定的是「场上有人报无主」,不是「自己报无主」——报无主的那位自己也能看。 + * - 交互: 点按钮 → 发 mingpai { seat } → 收 mingpai { seat, others:[{seat, zhucards}] } + * → 弹出本面板。【再点一次取消是纯前端开关】,不再请求服务端。 + * - 关闭方式: 点遮罩关闭;另可再点底栏按钮切换(与亮牌的「仅自动时长关闭」不同)。 + * - 【牌用精灵复制】张数不定;编辑器里只建 1 遮罩 + 2 容器 + 1 牌模板 + 2 标签文字。 + * 关闭 / onDestroy 时必须 removeRange 清理。 + * - 【为什么与 HistoryView 拆成两个 View】版式相同、渲染逻辑可共用,但两者数据独立、 + * 图层不同(304 vs 305);本项目约定「一个 View 恰好一个图层」,故各自成 View。 + * - 【无布局节点·待补】Layout_*.js 里没有 MING_* 布局节点,同 HistoryView 的说明。 + * + * 资源说明: + * - 遮罩: EQW_Images.MASK_DIM (609), 1 帧, 纯色可拉伸(与冲关/出牌历史共用同一资源) + * - 牌模板: EQW_Images.CARD_FACE_L (501), 60 帧, 单帧 110×190 + * + * 精灵ID分配: 2000–2005(群组 243) + * + * @see docs_dev/二七王-UI资源与精灵清单.md §1.7 明牌(D-6)/ §2.6 底栏 / §5.7b + * @see docs_dev/uiref/冲关牌型显示.png + */ //明牌(清单 §5.7b,Layer 305,群组 243,牌用精灵复制)—— //只显示另两家,数据 = mingpai.others[].zhucards(§1.7 D-6); //版式与上方 HistoryView(Layer 304)相同(遮罩 + 每家一排牌),差别只在数据源与家数,两个 View 共用同一套渲染逻辑,