From 19f93bb96f1d650cebddcb526f98abd8b2e10bf5 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Thu, 27 Aug 2026 01:37:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E4=B8=83=E7=8E=8B=EF=BC=9ASprites=5FT?= =?UTF-8?q?able.js=20=E8=A1=A5=204=20=E4=B8=AA=20View=20=E7=9A=84=E5=B8=83?= =?UTF-8?q?=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 按参考图与 UI 清单,为 TopInfoView / PlayerMarkView / LiangPaiView / FooterView 各补一块 JSDoc:分区标题标出 Layer 与 Group,正文含 ASCII 版式图(标注各区域 对应的精灵常量与实测坐标)、元素说明、资源说明、精灵 ID 分配与 @see 出处。 纯注释改动,数据部分一字未动(精灵总数仍 378、布局节点仍 61)。 顺带如实记下两处文档缺口:群组 206 的命名(亮牌条 vs 主牌统计条)与 底栏「扣底」按钮尚无精灵。 Co-Authored-By: Claude Opus 5 (1M context) --- .../01_SubGame/codes/config/Sprites_Table.js | 220 ++++++++++++++++++ 1 file changed, 220 insertions(+) diff --git a/client/js/01_SubGame/codes/config/Sprites_Table.js b/client/js/01_SubGame/codes/config/Sprites_Table.js index 8d032f6..057add5 100644 --- a/client/js/01_SubGame/codes/config/Sprites_Table.js +++ b/client/js/01_SubGame/codes/config/Sprites_Table.js @@ -8,6 +8,55 @@ // 后期即照这些注释在编辑器里逐个创建。 var EQW_Sprites = EQW_Sprites || {}; +// ============================================================================ +// 顶部信息条 - Layer 101 (TABLE_STATIC), Group 201 (TOP_INFO) +// ============================================================================ + +/** + * 顶部信息条 - TopInfoView + * + * 用途: 屏幕顶部正中常驻的三列小表格,展示本局的「主牌花色 / 庄家叫分 / 闲家抓分」。 + * 发牌起出现、整局不收起;收到 fapai 时三列清零(主=无、叫分=0、抓分=0)。 + * + * 布局说明(参考图 docs_dev/uiref/等待叫分.png 顶部中央; + * 位置见 EQW_Layout.TOP_INFO_BG = point(486, 4, 276×68)): + * + * ┌────────┬───────────────┬───────────────┐ y=4 + * │ 主 │ 叫分 │ 抓分 │ ← 表头三列:已画在底图上,无独立精灵 + * ├────────┼───────────────┼───────────────┤ + * │ [花] │ 60 [1子] │ 45 [1倍] │ ← 数据行(图中数值均为填充假数据) + * └────────┴───────────────┴───────────────┘ y=72 + * ^ ^ ^ ^ ^ + * │ │ │ │ └ TOP_GRADE_BADGE_BG(1007) + TOP_GRADE_BADGE_TEXT(1008) + * │ │ │ └─── TOP_GRADE_TEXT(1006) + * │ │ └──────────────── TOP_CALL_BADGE_BG(1004) + TOP_CALL_BADGE_TEXT(1005) + * │ └─────────────────── TOP_CALL_TEXT(1003) + * └──────────────────────────── TOP_SUIT_ICON(1002) + * + * TOP_INFO_BG(1001) 铺满整块(含表头文字与竖分隔线),其余 7 个精灵叠在其上。 + * + * 元素说明: + * - 「主」列花色图标: 帧 = flower(1方块 2梅花 3红心 4黑桃,服务端编号),选主前隐藏; + * 贴信息条内部左下角(EQW_Layout.TOP_SUIT_ICON: attach TOP_INFO_BG left/bottom, 30×30)。 + * - 「叫分」列: 数值取 shangzhuang.grade,角标「N子」取 multiple(随房间「爬坡」开关变)。 + * - 「抓分」列: 数值为闲家累计捡分(逐轮 chupai3.grade 累加,结算时以 aset.grade 为准); + * 角标取 Math.abs(curmultiple)(T-16/S-8:curmultiple 带符号,角标只显示大小)。 + * - 两个角标底都贴各自数值文字的 topRight(EQW_Layout.TOP_CALL_BADGE_BG / TOP_GRADE_BADGE_BG), + * 角标内的文字精灵复用同一矩形、不单独配布局。 + * - 【待设计稿】TOP_CALL_TEXT / TOP_GRADE_TEXT 两处数值文字的 x/y/w/h 清单 §6.5 未给, + * 布局里标为 runtime 注入,设计稿到位后回填成定点值。 + * + * 资源说明: + * - 面板底: EQW_Images.PANEL_TOP_INFO (601), 1 帧, 276×68 + * - 花色图标: EQW_Images.SUIT_ICON_S (511), 4 帧, 30×30, 帧序按 flower 编号(与牌面资源的 + * 花色顺序不同,两套互不换算) + * - 角标底: EQW_Images.BADGE_MULTIPLE (575), 2 帧, 34×18, 帧1=蓝底(叫分) 帧2=橙底(抓分) + * + * 精灵ID分配: 1001–1008(群组 201 号段 1001–1029) + * + * @see docs_dev/二七王-UI资源与精灵清单.md §2.1 顶部信息条 / §5.1 Layer 101 牌桌常驻 + * @see docs_dev/uiref/等待叫分.png + */ //顶部信息条:主 / 叫分 / 抓分 三列(清单 §5.1 群组 201) EQW_Sprites.TopInfoView = { Layer: EQW_Layers.TABLE_STATIC, //101 @@ -26,6 +75,73 @@ EQW_Sprites.TopInfoView = { } }; +// ============================================================================ +// 玩家位附加标记 - Layer 101 (TABLE_STATIC), Group 202 / 203 / 204 +// ============================================================================ + +/** + * 三家玩家位附加标记 - PlayerMarkView + * + * 用途: 在【平台画的头像框】旁叠加子游戏自己的标记——庄印章、余主公示的「主N/对N」角标、 + * 叫分阶段的状态文字。三个座位各一个群组,结构对称。 + * + * 布局说明(参考图 docs_dev/uiref/等待叫分.png;三人局座位映射见清单 §0.2: + * ind0=南=自己 / ind1=东=右上家 / ind3=西=左上家): + * + * 全屏 1280×720 的三处落点 —— + * ┌──────────────────────────────────────────────────────────────┐ y=0 + * │ ┌ 顶部信息条 ┐ │ + * │ [左上家] [右上家] │ y≈122 + * │ │ + * │ (桌面牌 / 操作区) │ + * │ │ + * │ [自己·底栏] │ y≈648 + * └──────────────────────────────────────────────────────────────┘ y=720 + * + * 左上家近景(EQW_Layout.PLAYER_AVATAR_FRAME_REF.LEFT = 22,122, 91×118,平台精灵 379): + * + * ┌─────────┐┌──┐ + * │ ││庄│ ← P_LEFT_BANKER(1100) attach 头像框 topRight, offset(+7,+8), 40×40 + * │ 头像 │└──┘ + * │ (平台) │ 60分 ← P_LEFT_STATUS_TEXT(1105) point(170,165) 130×70 + * │ │ 12 ← 同一块区域也是倒计时 CD_LEFT 的位置(见 CountdownView) + * ├─────────┤ + * │ 10 │ ← 昵称/分数,平台渲染,子游戏不碰 + * └─────────┘ + * ┌────┐┌────┐ + * │主 1││对 0│ ← P_LEFT_ZHU_BG(1101)+P_LEFT_ZHU_TEXT(1102) + * └────┘└────┘ P_LEFT_PAIR_BG(1103)+P_LEFT_PAIR_TEXT(1104) + * 主N 贴头像框 bottomLeft(0,+6) 40×19;对N 再贴主N 右侧 +44 + * + * 右上家(PLAYER_AVATAR_FRAME_REF.RIGHT = 1160,122,平台精灵 377)与左上家【左右镜像】: + * 庄印章改贴 topLeft(-40,+8),状态文字改到 point(980,165);主N/对N 仍贴 bottomLeft。 + * + * 自己(P_SELF_MARK, 群组 204)只有两个精灵,且落在【底栏】而非头像框旁: + * P_SELF_BANKER(1120) = point(338,668) 32×34(EQW_Layout.P_BANKER_MARK.SELF 把 kind + * 覆盖成 point,不贴附任何目标,与两个上家的 attach 定位方式不同,非笔误); + * 该位置与底栏「踩/有分/没分」按钮【互斥共用】,见 FooterView。 + * + * 元素说明: + * - 庄印章: 数据取 shangzhuang.banker / aset.banker,三家三个独立精灵、按 banker 显隐其一。 + * - 主N / 对N 角标: 数据取 seatlist[seat][4] = [剩余主牌数, 剩余主对数]; + * 【仅可查牌模式 + 场上已有人报无主】才出现,初始 [-1,-1] 时隐藏;不可查牌模式下永不出现。 + * 自己没有这组角标——自己的主/对数在手牌区旁的统计条上已经可见(见 LiangPaiView)。 + * - 状态文字: 叫分阶段显示「60分」(金) / 「不叫」(白),进入选主后清空; + * 样式 EQW_Layout.TEXT_STYLE.STATUS_BIG (46px 白字居中)。自己(204)也有一个状态文字精灵 + * P_SELF_STATUS_TEXT(1121),但清单 §6.6 未给它独立坐标(自己叫的分显示在中央大字区)。 + * - ⚠ 参考图上三家同时挂着「庄」印章,是叠画示意(清单 §0.5),实际同时只有一家是庄。 + * + * 资源说明: + * - 庄印章: EQW_Images.MARK_BANKER (571), 1 帧, 40×40 + * - 主N/对N 角标底: EQW_Images.BADGE_ZHU_PAIR (574), 2 帧, 44×20, 帧1=黄底(主) 帧2=白底(对) + * - 头像框本身由平台提供,子游戏【不建】,仅登记 ID 供 attach 引用——见本文件末尾 + * EQW_PlatformSprites(376+ind,落在框架保留段 1–1000)。 + * + * 精灵ID分配: 1100–1105(左)/ 1110–1115(右)/ 1120–1121(自己),群组号段 1100–1149 + * + * @see docs_dev/二七王-UI资源与精灵清单.md §2.2 玩家位附加标记 / §2.5 余主公示 / §6.6 玩家位配置 + * @see docs_dev/uiref/等待叫分.png + */ //三家玩家位附加标记:庄印章 + 主N/对N 角标 + 状态文字,跨三个群组 //(头像框本身是平台提供,登记见本文件末尾 EQW_PlatformSprites;本 View 的精灵全部 attach 到平台头像框上,见清单 §6.6) EQW_Sprites.PlayerMarkView = { @@ -61,6 +177,46 @@ EQW_Sprites.PlayerMarkView = { } }; +// ============================================================================ +// 手牌上方的统计信息条 - Layer 101 (TABLE_STATIC), Group 206 (LIANGPAI_BAR) +// ============================================================================ + +/** + * 亮牌 / 主牌统计信息条 - LiangPaiView + * + * 用途: 手牌区【上方偏左】的一条半透明圆角小条,显示一行统计文案。 + * + * 布局说明(参考图 docs_dev/uiref/等待叫分.png 左侧「主牌对子: 1对」那条; + * 位置见 EQW_Layout.LIANGPAI_BG = point(35, 400, 210×35)): + * + * x=35 x=245 + * ┌──────────────────────────────┐ y=400 + * │ 主牌对子: 1对 │ ← LIANGPAI_TEXT(1031),居中白字 + * └──────────────────────────────┘ y=435 + * ↑ LIANGPAI_BG(1030) 半透圆角条底,210×35 + * ┌──────────────────────────────────────────────────── … ─┐ y=455 + * │ 自己手牌区(单排) │ + * └──────────────────────────────────────────────────── … ─┘ y=645 + * + * 即:紧贴手牌区上沿、左对齐到手牌左边缘附近,整局常驻不遮牌。 + * + * 元素说明: + * - 文案为【前端据 flower 本地统计自己手牌】得出,不需要服务端下发,也不受查牌模式与 + * 报无主影响;有手牌时始终显示。文案格式暂定「x对 x主」(清单 §7.2 T-9 未定案, + * 参考图写的是「主牌对子: 1对」)——文案进配置,不在代码里写死字符串。 + * - 【命名待统一】本 View 与 EQW_Groups.LIANGPAI_BAR、清单 §5.1 都叫「亮牌条」, + * 但它的位置(x35 y400)与用途对应的是清单 §2.5 的「自己的主牌统计条」; + * §1.6 的「亮牌」(庄家向闲家亮固定主牌)走的是遮罩面板、复用 §5.7b 的 HistoryView 精灵, + * 与本条不是一回事。两者不要混用,命名以清单定案为准。 + * + * 资源说明: + * - 条底: EQW_Images.BAR_LIANGPAI (605), 1 帧, 210×35, 半透明圆角 + * + * 精灵ID分配: 1030–1031(群组 206) + * + * @see docs_dev/二七王-UI资源与精灵清单.md §2.5 自己的主牌统计 + 余主公示 / §5.1 + * @see docs_dev/uiref/等待叫分.png + */ //亮牌信息条(清单 §5.1 群组 206) EQW_Sprites.LiangPaiView = { Layer: EQW_Layers.TABLE_STATIC, //101 @@ -73,6 +229,70 @@ EQW_Sprites.LiangPaiView = { } }; +// ============================================================================ +// 底栏 - Layer 101 (TABLE_STATIC), Group 205 (FOOTER) +// ============================================================================ + +/** + * 底栏 - FooterView + * + * 用途: 屏幕最下方一条深色横条(整局常驻),承载局数、右侧功能按钮组、 + * 以及闲家专用的「踩/有分/没分」提示按钮。左侧头像/昵称/分数由平台渲染。 + * + * 布局说明(参考图 docs_dev/uiref/等待叫分.png 底栏 + + * docs_dev/uiref/自己是闲家时,底下的踩有分没分按钮.png; + * 条底见 EQW_Layout.FOOTER_BG = point(0, 648, 1280×72)): + * + * y=648 ┌──────────────────────────────────────────────────────────────────┐ + * │ ┌────┐ │ + * │ │头像│ 玩家昵称 10 [庄] 1/4 局 [明牌][已出牌][上一轮][底牌] │ + * │ └────┘ │ + * y=720 └──────────────────────────────────────────────────────────────────┘ + * └── 平台渲染,子游戏不碰 ──┘ + * (A) (B) (C) + * + * (A) x≈335–573:庄印章与三个提示按钮【互斥】共用同一块区域(清单 §1.7)—— + * 自己是庄 → P_SELF_BANKER(1120)(属 PlayerMarkView),point(338,668) 32×34 + * 自己是闲 → 三个提示按钮,EQW_Layout.FOOTER_TISHI_BUTTONS: + * line/horizontal, anchor left, anchorX=335, anchorY=672, + * itemWidth=52, itemHeight=30, spacing=26 + * ┌────┐ ┌────┐ ┌────┐ + * │ 踩 │ │有分│ │没分│ + * └────┘ └────┘ └────┘ + * BTN_TISHI_CAI BTN_TISHI_HAS BTN_TISHI_NONE + * (1050) (1052) (1054) + * ⚠ 按钮顺序是 踩→有分→没分,与协议 tip 编号(1踩 2没分 3有分) + * 【不同序】,映射不要按位置下标推。 + * (B) FOOTER_ASET_TEXT(1041)「1/4 局」,point(635,672) 65×26, + * 样式 EQW_Layout.TEXT_STYLE.ASET_COUNT (20px 白字居中),常驻,取 asetidx/asetcount。 + * (C) 右侧功能钮组 EQW_Layout.FOOTER_FUNC_BUTTONS:line/horizontal,右对齐到 x=1250, + * anchorY=672,itemHeight=30,spacing=15,【逐项不等宽】(T-25): + * BTN_MINGPAI(1042) 74 / BTN_HISTORY(1044) 87 / BTN_LAST_ROUND(1046) 93 / + * BTN_BOTTOM_CARDS(1048) 78 + * 四个按钮各按条件显隐、不全常驻(清单 §2.6);参考图里同时画出属叠画示意。 + * + * 元素说明: + * - 每个按钮 = 一个图片精灵(按钮底)+ 一个文字精灵(按钮文案),成对出现。 + * - 显隐条件(服务端权威字段驱动,前端不自行推导): + * 明牌 —— 可查牌 + 出牌阶段 + 场上已有人报无主(baozhu==1),三家都显示 + * 已出牌 —— 可查牌 + 出牌阶段 + * 上一轮 —— 可查牌 + 出牌阶段 + 已打过至少一轮 + * 底牌 —— 庄家全程;闲家仅开底过的局(70 分坐庄),见 S-3 + * 踩/有分/没分 —— 自己是闲家 + 出牌阶段 + * - 【缺口】清单 §2.6 列的右侧功能按钮共 5 个(多一个「扣底」= 看庄家埋的 8 张), + * §5.1 精灵表与本文件只登记了 4 个,「扣底」按钮尚未分配精灵,号段 1056–1069 留有空位。 + * + * 资源说明: + * - 底栏条: EQW_Images.BAR_FOOTER (608), 1 帧, 1280×72 + * - 功能钮底: EQW_Images.BTN_BOTTOM_FUNC (538), 1 帧, 88×30, 深色圆角(4 个按钮共用) + * - 提示钮底: EQW_Images.BTN_TISHI (540), 1 帧, 52×30, 同风格但更窄(3 个按钮共用) + * + * 精灵ID分配: 1040–1055(群组 205 号段 1040–1069) + * + * @see docs_dev/二七王-UI资源与精灵清单.md §2.6 底栏 / §1.7 闲家提示 / §5.1 / §6.5 + * @see docs_dev/uiref/等待叫分.png + * @see docs_dev/uiref/自己是闲家时,底下的踩有分没分按钮.png + */ //底栏:局数 + 功能按钮(明牌/已出牌/上一轮/底牌)+ 提示按钮(清单 §5.1 群组 205) EQW_Sprites.FooterView = { Layer: EQW_Layers.TABLE_STATIC, //101