- CD_LEFT/CD_RIGHT/CD_SELF(1150-1152)由文字精灵改为多帧图数字精灵: 资源 NUM_COUNTDOWN,纯秒数无后缀;对应布局节点 P_COUNTDOWN 的 h 改取 NUM_STYLE.COUNTDOWN.charHeight,w 留到运行时注入。 - 结算得分 RESULT_SCORE_LEFT/RIGHT/SELF(1805-1807)同理由文字精灵改为 数字图精灵(NUM_RESULT_WIN/NUM_RESULT_LOSE),与大局结算已有的 ACC_TPL_SCORE_NUM 保持一致;布局节点随之调整,移除不再使用的 TEXT_STYLE.SCORE_BIG。 - NUM_CALL_SCORE 第16帧由"待美术与规则确认"改为明确的"无后缀"(叫分档位 面板只显示纯数字,"N子"角标是独立文字精灵);NUM_MAIN_SUIT_COUNT / NUM_RESULT_WIN / NUM_RESULT_LOSE 第16帧仍待确认,不改。 - Layout_Action.js 的 CALL_BTN_SCORE_TEXT、Layout_Result.js 的 RESULT_SCORE_TEXT 改名为 CALL_BTN_SCORE_NUM / RESULT_SCORE_NUM: 两者驱动的都是数字图精灵,_TEXT 后缀误导;同步测试引用。 - docs/client/development-guide/02:订正"SpriteManager 第1154行"这一失效 行号引用(回退后该行号落在 setTextWithWidth 体内),改为不写死行号。 - docs_dev 清单同步:§2.4/§5.4/§5.6/§6.6/§6.9 倒计时与结算得分的精灵类型 描述、§6.6/§6.9 对应布局参数。 - test_constants.js 的 NUM_STYLE 同源守卫表新增 COUNTDOWN、RESULT_WIN、 RESULT_LOSE 三对(连同改名后的 CALL_BTN_SCORE_NUM),共 6 条新断言。 精灵总数、布局节点总数均未变(378 / 61),只改类型与命名,不增删。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
161 lines
9.7 KiB
JavaScript
161 lines
9.7 KiB
JavaScript
///////////////////////////////////////////////////////////////
|
||
////////// EQW_Sprites: 精灵结构(清单 §5.6/§5.6a/§5.7a/§5.7b 结算)
|
||
///////////////////////////////////////////////////////////////
|
||
// 子游戏精灵段 1001–2999。结构与 Sprites_Table.js 一致:
|
||
// View 下 Layer 为图层声明(一个 View 恰好一个图层),其余键是 group 容器;
|
||
// 容器内 id 为群组 ID、其余键才是精灵 id。
|
||
// 连号精灵逐条写全,不用循环生成。
|
||
var EQW_Sprites = EQW_Sprites || {};
|
||
|
||
//小局结算面板(清单 §5.6,Layer 302 群组 240)
|
||
//
|
||
//以下键号在源清单中被显式判定「不需要」,本文件不占用,留空号以便追溯:
|
||
// 1814 RESULT_JUDGE_TEXT —— 结算面板不显示判定文字,改由动画呈现(§1.8,D-8)
|
||
EQW_Sprites.AsetResultView = {
|
||
Layer: EQW_Layers.POPUP_ASET_RESULT, //302
|
||
|
||
AsetResult: {
|
||
id: EQW_Groups.ASET_RESULT, //240
|
||
|
||
RESULT_BOTTOM_PANEL: 1800, //图片:底牌区面板底,资源 EQW_Images.PANEL_BOTTOM_CARDS
|
||
RESULT_BOTTOM_TEXT: 1801, //文字:「叫分{multiple}子 底牌 {grade1}x{bottom.multiple}」
|
||
|
||
//—— 三家分数光晕,资源 EQW_Images.GLOW_RESULT,帧1=赢(橙) 帧2=输(蓝) ——
|
||
RESULT_GLOW_LEFT: 1802,
|
||
RESULT_GLOW_RIGHT: 1803,
|
||
RESULT_GLOW_SELF: 1804,
|
||
|
||
//—— 三家总分(aset.seatlist[i].grade),多帧图数字精灵,正分橙带 `+`、负分蓝带 `-`,
|
||
// 资源 EQW_Images.NUM_RESULT_WIN(赢)/ NUM_RESULT_LOSE(输),按符号二选一绑资源,
|
||
// 显示用 SpriteManager.setNumberImage(spriteId, '+20', charWidth),charWidth 见
|
||
// EQW_Layout.NUM_STYLE.RESULT_WIN/RESULT_LOSE——与 ACC_TPL_SCORE_NUM(1914,大局结算总分)
|
||
// 同一套资源与用法,两处结算得分显示保持一致(2026-08-27 由文字精灵改为数字图精灵)——
|
||
RESULT_SCORE_LEFT: 1805,
|
||
RESULT_SCORE_RIGHT: 1806,
|
||
RESULT_SCORE_SELF: 1807,
|
||
|
||
//—— 三家捡分子数得分文字 grade_jf【T-13】——
|
||
RESULT_JF_LEFT: 1808,
|
||
RESULT_JF_RIGHT: 1809,
|
||
RESULT_JF_SELF: 1810,
|
||
|
||
//—— 三家算奖得分文字 grade_aw【T-13】——
|
||
RESULT_AW_LEFT: 1811,
|
||
RESULT_AW_RIGHT: 1812,
|
||
RESULT_AW_SELF: 1813,
|
||
|
||
RESULT_BTN_CG: 1815, //图片:「冲关牌型」按钮,资源 EQW_Images.BTN_CG_CARDS
|
||
RESULT_BTN_CG_TEXT: 1816, //文字:按钮文案「冲关牌型」
|
||
RESULT_BTN_NEXT: 1817, //图片:「下一局」按钮,资源 EQW_Images.BTN_NEXT_ASET
|
||
RESULT_BTN_NEXT_TEXT: 1818 //文字:按钮文案「下一局」
|
||
}
|
||
};
|
||
//> 底牌 8 张精灵复用 Sprites_Cards.js 群组 215(BuryCardsView.BuryCards,1258–1265),不在此重复。
|
||
|
||
//冲关牌型叠加层(清单 §5.6a,Layer 302 群组 244,精灵复制)——
|
||
//本层的牌用 SpriteCopyUtils 运行时复制,不预置固定张数(cards 长度不定,最多可达 20 余张)。
|
||
//编辑器里只需建 5 个精灵(3 容器 + 1 牌模板 + 1 遮罩);奖数文字 3 个照常预置。
|
||
//RESULT_BTN_NEXT(1817/1818)在遮罩之上仍需可见可点,其图层内层级须高于 CG_MASK。
|
||
//清理是硬要求:关闭叠加层/组件 onDestroy 时必须 SpriteCopyUtils.removeRange(boxId, 0, cards.length),否则复制精灵残留。
|
||
EQW_Sprites.ChongGuanOverlayView = {
|
||
Layer: EQW_Layers.POPUP_ASET_RESULT, //302
|
||
|
||
ChongGuan: {
|
||
id: EQW_Groups.CHONGGUAN, //244
|
||
|
||
CG_MASK: 1820, //图片:半透黑遮罩(拉伸满屏,兼作点击关闭热区),资源 EQW_Images.MASK_DIM
|
||
CG_BOX_LEFT: 1821, //容器:左上家冲关牌容器(SpriteCopyUtils 复制的父精灵)
|
||
CG_BOX_RIGHT: 1822, //容器:右上家冲关牌容器
|
||
CG_BOX_SELF: 1823, //容器:自己冲关牌容器
|
||
CG_CARD_TPL: 1824, //模板:冲关牌模板(编辑器里放好、默认隐藏,只作样式来源),资源 EQW_Images.CARD_FACE_L
|
||
|
||
//—— 三家奖数文字,与该家的冲关牌并列显示,取 aset.seatlist[i].naward ——
|
||
CG_COUNT_LEFT: 1825,
|
||
CG_COUNT_RIGHT: 1826,
|
||
CG_COUNT_SELF: 1827
|
||
}
|
||
};
|
||
|
||
//大局总结算 / 解散结算(清单 §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。
|
||
//清理:关闭面板时按各段 removeRange。
|
||
//解散结算复用本面板(协议 §14.1,解散包也带 account),只是 aset 各项为 0。
|
||
EQW_Sprites.AccountView = {
|
||
Layer: EQW_Layers.POPUP_ACCOUNT, //303
|
||
|
||
Account: {
|
||
id: EQW_Groups.ACCOUNT, //241
|
||
|
||
ACC_PANEL_BG: 1900, //图片:面板底(圆角浅灰绿),资源 EQW_Images.PANEL_ACCOUNT
|
||
ACC_TITLE_BAR: 1901, //图片:标题栏(青绿底),资源 EQW_Images.BAR_ACCOUNT_TITLE
|
||
ACC_TITLE_TEXT: 1902, //文字:「二七王-3人 房号… 共…局 …」
|
||
ACC_BTN_CLOSE: 1903, //图片:右上角关闭按钮,资源 EQW_Images.BTN_ACC_CLOSE
|
||
ACC_RULE_BAR: 1904, //图片:底部规则栏(浅绿底),资源 EQW_Images.BAR_ACCOUNT_RULE
|
||
ACC_RULE_TEXT: 1905, //文字:「规则:可查牌、傍王、爬坡算子」
|
||
|
||
ACC_ROW_CONTAINER: 1910, //容器:玩家栏的复制父精灵
|
||
|
||
//—— 玩家栏复制模板(tag 分段见上)——
|
||
ACC_TPL_RANK: 1911, //模板:名次徽章,资源 EQW_Images.BADGE_RANK,帧=名次1–3
|
||
ACC_TPL_AVATAR: 1912, //模板:头像,运行时贴玩家头像
|
||
ACC_TPL_TEXT: 1913, //模板:通用文字(昵称/ID/各项分数,一行一个)
|
||
ACC_TPL_SCORE_NUM: 1914, //模板:右侧总分大字(多帧图数字精灵),资源 EQW_Images.NUM_RESULT_WIN / NUM_RESULT_LOSE,
|
||
//显示用 SpriteManager.setNumberImage(复制精灵ID, '+120', charWidth)——
|
||
//setNumberImage 走的是 TEXT/WIDTH 属性,_validateSpriteId 也接受复制精灵的字符串 ID,
|
||
//故复制出来的玩家栏总分同样一个精灵显示整串(2026-08-26 核对)
|
||
ACC_TPL_DIVIDER: 1915, //模板:行间分隔线,资源 EQW_Images.LINE_DIVIDER
|
||
|
||
//—— 底部 4 个功能按钮 ——
|
||
ACC_BTN_AGAIN: 1920, //图片:「再来一局」按钮,资源 EQW_Images.BTN_ACCOUNT_AGAIN
|
||
ACC_BTN_AGAIN_TEXT: 1921, //文字:按钮文案「再来一局」
|
||
ACC_BTN_SHARE: 1922, //图片:「分享好友」按钮,资源 EQW_Images.BTN_ACCOUNT_SHARE
|
||
ACC_BTN_SHARE_TEXT: 1923, //文字:按钮文案「分享好友」
|
||
ACC_BTN_COPY: 1924, //图片:「复制战绩」按钮,资源 EQW_Images.BTN_ACCOUNT_COPY
|
||
ACC_BTN_COPY_TEXT: 1925, //文字:按钮文案「复制战绩」
|
||
ACC_BTN_EXIT: 1926, //图片:「退出房间」按钮,资源 EQW_Images.BTN_ACCOUNT_EXIT
|
||
ACC_BTN_EXIT_TEXT: 1927 //文字:按钮文案「退出房间」
|
||
}
|
||
};
|
||
|
||
//出牌历史 / 上一轮 / 亮牌(清单 §5.7b,Layer 304,群组 242,牌用精灵复制)——
|
||
//三家都显示,数据 = pushlist 摊平聚合到各家(§1.7 D-7);上一轮同一套精灵,只取 pushlist 末尾一项;
|
||
//亮牌只显示一排(庄家固定主牌),数据 = liangpai.cards(§1.6),复用同一套遮罩+容器+牌模板,仅数据源与排数不同。
|
||
//与下方 MingPaiView(Layer 305)版式相同(遮罩 + 每家一排牌),差别只在数据源与家数,两个 View 共用同一套渲染逻辑,
|
||
//但各自数据独立、图层不同,故拆成两个 View(一个 View 恰好一个图层)。
|
||
EQW_Sprites.HistoryView = {
|
||
Layer: EQW_Layers.POPUP_HISTORY, //304
|
||
|
||
History: {
|
||
id: EQW_Groups.HISTORY, //242
|
||
|
||
HIST_MASK: 1950, //图片:半透黑遮罩(兼关闭热区),资源 EQW_Images.MASK_DIM
|
||
HIST_BOX_LEFT: 1951, //容器:左上家牌容器
|
||
HIST_BOX_RIGHT: 1952, //容器:右上家牌容器
|
||
HIST_BOX_SELF: 1953, //容器:自己牌容器
|
||
HIST_CARD_TPL: 1954, //模板:牌模板,资源 EQW_Images.CARD_FACE_L
|
||
HIST_LABEL_LEFT: 1955, //文字:左上家座位标签(昵称/张数)
|
||
HIST_LABEL_RIGHT: 1956, //文字:右上家座位标签
|
||
HIST_LABEL_SELF: 1957 //文字:自己座位标签
|
||
}
|
||
};
|
||
|
||
//明牌(清单 §5.7b,Layer 305,群组 243,牌用精灵复制)——
|
||
//只显示另两家,数据 = mingpai.others[].zhucards(§1.7 D-6);
|
||
//版式与上方 HistoryView(Layer 304)相同(遮罩 + 每家一排牌),差别只在数据源与家数,两个 View 共用同一套渲染逻辑,
|
||
//但各自数据独立、图层不同,故拆成两个 View(一个 View 恰好一个图层)。
|
||
EQW_Sprites.MingPaiView = {
|
||
Layer: EQW_Layers.POPUP_MINGPAI, //305
|
||
|
||
MingPai: {
|
||
id: EQW_Groups.MINGPAI, //243
|
||
|
||
MING_MASK: 2000, //图片:明牌遮罩,资源 EQW_Images.MASK_DIM
|
||
MING_BOX_A: 2001, //容器:另一家A牌容器
|
||
MING_BOX_B: 2002, //容器:另一家B牌容器
|
||
MING_CARD_TPL: 2003, //模板:牌模板,资源 EQW_Images.CARD_FACE_L
|
||
MING_LABEL_A: 2004, //文字:A座位标签
|
||
MING_LABEL_B: 2005 //文字:B座位标签
|
||
}
|
||
};
|