二七王:Sprites_Table.js 补 4 个 View 的布局说明注释

按参考图与 UI 清单,为 TopInfoView / PlayerMarkView / LiangPaiView / FooterView
各补一块 JSDoc:分区标题标出 Layer 与 Group,正文含 ASCII 版式图(标注各区域
对应的精灵常量与实测坐标)、元素说明、资源说明、精灵 ID 分配与 @see 出处。

纯注释改动,数据部分一字未动(精灵总数仍 378、布局节点仍 61)。
顺带如实记下两处文档缺口:群组 206 的命名(亮牌条 vs 主牌统计条)与
底栏「扣底」按钮尚无精灵。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-27 01:37:44 +08:00
co-authored by Claude Opus 5
parent 0c58ae67db
commit 19f93bb96f
@@ -8,6 +8,55 @@
// 后期即照这些注释在编辑器里逐个创建。 // 后期即照这些注释在编辑器里逐个创建。
var EQW_Sprites = EQW_Sprites || {}; 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) //顶部信息条:主 / 叫分 / 抓分 三列(清单 §5.1 群组 201)
EQW_Sprites.TopInfoView = { EQW_Sprites.TopInfoView = {
Layer: EQW_Layers.TABLE_STATIC, //101 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 角标 + 状态文字,跨三个群组 //三家玩家位附加标记:庄印章 + 主N/对N 角标 + 状态文字,跨三个群组
//(头像框本身是平台提供,登记见本文件末尾 EQW_PlatformSprites;本 View 的精灵全部 attach 到平台头像框上,见清单 §6.6) //(头像框本身是平台提供,登记见本文件末尾 EQW_PlatformSprites;本 View 的精灵全部 attach 到平台头像框上,见清单 §6.6)
EQW_Sprites.PlayerMarkView = { 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) //亮牌信息条(清单 §5.1 群组 206)
EQW_Sprites.LiangPaiView = { EQW_Sprites.LiangPaiView = {
Layer: EQW_Layers.TABLE_STATIC, //101 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) //底栏:局数 + 功能按钮(明牌/已出牌/上一轮/底牌)+ 提示按钮(清单 §5.1 群组 205)
EQW_Sprites.FooterView = { EQW_Sprites.FooterView = {
Layer: EQW_Layers.TABLE_STATIC, //101 Layer: EQW_Layers.TABLE_STATIC, //101