/////////////////////////////////////////////////////////////// ////////// EQW_Sprites: 精灵结构(清单 §5.1 牌桌常驻)///////// /////////////////////////////////////////////////////////////// // 子游戏精灵段 1001–2999(段内仅 3000 被平台占用)。 // 以 UI View 为组织单位:View 下 Layer 为图层声明(一个 View 恰好一个图层), // 其余键一律是「group 容器」——容器内 id 为群组 ID、其余键才是精灵 id。 // 每个精灵注明:类型(图片/文字)+ 用途 + 资源键 + 帧说明—— // 后期即照这些注释在编辑器里逐个创建。 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 TopInfo: { id: EQW_Groups.TOP_INFO, //201 TOP_INFO_BG: 1001, //图片:三列表格底,资源 EQW_Images.PANEL_TOP_INFO TOP_SUIT_ICON: 1002, //图片:「主」列花色图标,资源 EQW_Images.SUIT_ICON_S,帧 = flower(1方块 2梅花 3红心 4黑桃,服务端 flower 编号) TOP_CALL_TEXT: 1003, //文字:叫分数值 TOP_CALL_BADGE_BG: 1004, //图片:叫分角标底,资源 EQW_Images.BADGE_MULTIPLE 帧1(蓝底) TOP_CALL_BADGE_TEXT: 1005, //文字:「N子」 TOP_GRADE_TEXT: 1006, //文字:抓分数值 TOP_GRADE_BADGE_BG: 1007, //图片:抓分角标底,资源 EQW_Images.BADGE_MULTIPLE 帧2(橙底) TOP_GRADE_BADGE_TEXT: 1008 //文字:「N倍」,取 Math.abs(curmultiple)(T-16/S-8:curmultiple 带符号,展示取绝对值) } }; // ============================================================================ // 玩家位附加标记 - 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 = { Layer: EQW_Layers.TABLE_STATIC, //101 LeftMark: { id: EQW_Groups.P_LEFT_MARK, //202 左上家 P_LEFT_BANKER: 1100, //图片:「庄」印章,资源 EQW_Images.MARK_BANKER,attach 头像框 topRight P_LEFT_ZHU_BG: 1101, //图片:「主N」角标底,资源 EQW_Images.BADGE_ZHU_PAIR 帧1(黄底),attach 头像框 bottomLeft P_LEFT_ZHU_TEXT: 1102, //文字:剩余主牌数 P_LEFT_PAIR_BG: 1103, //图片:「对N」角标底,资源 EQW_Images.BADGE_ZHU_PAIR 帧2(白底),attach 主N角标右侧 P_LEFT_PAIR_TEXT: 1104, //文字:剩余主对数 P_LEFT_STATUS_TEXT: 1105 //文字:「60分」/「不叫」 }, RightMark: { id: EQW_Groups.P_RIGHT_MARK, //203 右上家,结构同 202 P_RIGHT_BANKER: 1110, //图片:「庄」印章,资源 EQW_Images.MARK_BANKER,attach 头像框 topLeft P_RIGHT_ZHU_BG: 1111, //图片:「主N」角标底,资源 EQW_Images.BADGE_ZHU_PAIR 帧1(黄底),attach 头像框 bottomLeft P_RIGHT_ZHU_TEXT: 1112, //文字:剩余主牌数 P_RIGHT_PAIR_BG: 1113, //图片:「对N」角标底,资源 EQW_Images.BADGE_ZHU_PAIR 帧2(白底),attach 主N角标右侧 P_RIGHT_PAIR_TEXT: 1114, //文字:剩余主对数 P_RIGHT_STATUS_TEXT: 1115 //文字:「60分」/「不叫」 }, SelfMark: { id: EQW_Groups.P_SELF_MARK, //204 自己,无主N/对N角标——自己主/对数已在手牌区可见 P_SELF_BANKER: 1120, //图片:底栏「庄」印章,资源 EQW_Images.MARK_BANKER,point (338,668) P_SELF_STATUS_TEXT: 1121 //文字:「50分」/「不叫」 } }; // ============================================================================ // 手牌上方的统计信息条 - 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 LiangPaiBar: { id: EQW_Groups.LIANGPAI_BAR, //206 LIANGPAI_BG: 1030, //图片:半透圆角条,资源 EQW_Images.BAR_LIANGPAI LIANGPAI_TEXT: 1031 //文字:亮牌统计文案 } }; // ============================================================================ // 底栏 - 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 Footer: { id: EQW_Groups.FOOTER, //205 FOOTER_BG: 1040, //图片:底栏深色条,资源 EQW_Images.BAR_FOOTER FOOTER_ASET_TEXT: 1041, //文字:「1/4 局」 BTN_MINGPAI: 1042, //图片:「明牌」按钮,资源 EQW_Images.BTN_BOTTOM_FUNC BTN_MINGPAI_TEXT: 1043, //文字:按钮文案「明牌」 BTN_HISTORY: 1044, //图片:「已出牌」按钮,资源 EQW_Images.BTN_BOTTOM_FUNC BTN_HISTORY_TEXT: 1045, //文字:按钮文案「已出牌」 BTN_LAST_ROUND: 1046, //图片:「上一轮」按钮,资源 EQW_Images.BTN_BOTTOM_FUNC BTN_LAST_ROUND_TEXT: 1047, //文字:按钮文案「上一轮」 BTN_BOTTOM_CARDS: 1048, //图片:「底牌」按钮,资源 EQW_Images.BTN_BOTTOM_FUNC BTN_BOTTOM_CARDS_TEXT: 1049, //文字:按钮文案「底牌」 BTN_TISHI_CAI: 1050, //图片:「踩」按钮(闲家,占庄标区),资源 EQW_Images.BTN_TISHI BTN_TISHI_CAI_TEXT: 1051, //文字:「踩」 BTN_TISHI_HAS: 1052, //图片:「有分」按钮,资源 EQW_Images.BTN_TISHI BTN_TISHI_HAS_TEXT: 1053, //文字:「有分」 BTN_TISHI_NONE: 1054, //图片:「没分」按钮,资源 EQW_Images.BTN_TISHI BTN_TISHI_NONE_TEXT: 1055 //文字:「没分」 } }; /////////////////////////////////////////////////////////////// ////////// EQW_PlatformSprites: 平台提供精灵登记表 ////////////// /////////////////////////////////////////////////////////////// //平台提供的精灵,子游戏【不建】,仅登记 ID 供布局 attach 引用。 //落在框架保留段 1–1000,故独立于 EQW_Sprites、不参与子游戏号段校验。 //三人局座位映射(清单 §0.2):ind0=南=自己 ind1=东=右上家 ind3=西=左上家; //头像框基址 376+ind(清单 §6.6)。 var EQW_PlatformSprites = EQW_PlatformSprites || { P_SELF_AVATAR: 376, //平台头像框 376+ind0,自己(南) P_RIGHT_AVATAR: 377, //平台头像框 376+ind1,右上家(东) P_LEFT_AVATAR: 379 //平台头像框 376+ind3,左上家(西) };