feat(polaris): 《山海巡异录》③首页下半补完——scrim 放出山水金乌+主按钮册页托+CTA 加重
Some checks failed
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled

创始人真机眼验:表现层二轮③首页只消化上半,下半四主按钮(启程/每日一巡/图鉴/成就)仍黑底金边方钮、整屏死黑。死黑真因=上轮 scrim 0.5 把 bg-scene-02(金乌·苍岭·云海亮国风画)压死、四按钮又落偏暗青黛山峦区读成黑底方钮;现 scrim 0.5→0.3 放出山水金乌整屏即国风底,描金屏框+四角云纹装裱成卷轴,四主按钮落浅米册页卷轴托成组、启程出巡 CTA 朱漆+描金外飘框与次级拉层次,副标加墨条背衬保 scrim 降后可读性;computeHomeTargets 靶位未动。home-drive displayCount 50→58、scene-smoke 全绿、esbuild EXIT=0。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
lili 2026-07-09 00:38:49 -07:00
parent d4cb740a86
commit c2a86b3a02

View File

@ -582,11 +582,24 @@ export function createRunScene(api) {
function drawHome(scene, hs) {
const L = layerFor(scene);
const m = hs.home.meta;
// 满幅山水底(与地图/战斗同底,压暗略重,去纯黑感)。
skin.bgCover(L, BG_SCENE_B, VIEW_W, VIEW_H, 0.5);
// 题头:卷轴横条背衬 + 匾额(原来匾额光秃浮在黑底上,和别屏的 HUD 语汇脱节)。
// 满幅青绿山水底(bg-scene-02=金乌·苍岭·云海的亮国风画)。缺点③补完:上轮 scrim 0.5 把这幅亮画
// 压成「一片死黑」——现降到 0.3 放出山水与金乌,整屏底即国风,不再靠死黑蒙版遮;可读性改由局部册页托兜。
skin.bgCover(L, BG_SCENE_B, VIEW_W, VIEW_H, 0.3);
// 描金屏框 + 四角云纹:把满屏山水装裱进一幅卷轴,给整屏一道国风描金边框(去「无边界死黑」感)。
{
const gf = keep(scene, scene.add.graphics().setDepth(-14)); // 压在 bg(-20/-19)之上、内容(0+)之下
gf.lineStyle(2, GOLD, 0.85); gf.strokeRoundedRect(7, 7, VIEW_W - 14, VIEW_H - 14, 12);
gf.lineStyle(1, GOLD_DK, 0.65); gf.strokeRoundedRect(11, 11, VIEW_W - 22, VIEW_H - 22, 9);
for (const [cx, cy, sx, sy] of [[7, 7, 1, 1], [VIEW_W - 7, 7, -1, 1], [7, VIEW_H - 7, 1, -1], [VIEW_W - 7, VIEW_H - 7, -1, -1]]) {
gf.lineStyle(2, GOLD, 0.95); gf.beginPath(); gf.moveTo(cx + sx * 18, cy); gf.lineTo(cx, cy); gf.lineTo(cx, cy + sy * 18); gf.strokePath();
gf.fillStyle(GOLD, 0.9); gf.fillCircle(cx, cy, 2);
}
}
// 题头:卷轴横条背衬 + 匾额。
skin.hudBanner(L, VIEW_W / 2, VIEW_H * 0.11, VIEW_W - 24, 76);
skin.plaque(L, VIEW_W / 2, VIEW_H * 0.11, '山海巡异录', { w: 280, h: 60, size: 32 });
// 副标背衬:scrim 降低后天光偏亮,给副标一条半透明墨条保对比(局部托底,不回退到满屏死黑)。
keep(scene, scene.add.rectangle(VIEW_W / 2, VIEW_H * 0.175, 216, 22, INK2, 0.5).setStrokeStyle(1, GOLD_DK, 0.55).setDepth(11));
stxt(scene, VIEW_W / 2, VIEW_H * 0.175, `出巡 ${m.runsPlayed} · 功成 ${m.wins}`, 13, '#e8dcc0');
// 五行相生珠带(木火土金水;点题链系机制,程序绘恒渲染,补足「无一件美术」的空)。
ELEMENT_CYCLE.forEach((el, i) => {
@ -621,10 +634,25 @@ export function createRunScene(api) {
const asc = hs.home.sel.ascension;
stxt(scene, VIEW_W / 2, VIEW_H * 0.485, `进阶 ${asc}${hs.home.maxAscension > 0 ? ` / 已启 ${hs.home.maxAscension}` : ''}`, 15, INK_TEXT);
keep(scene, scene.add.text(VIEW_W / 2, VIEW_H * 0.515, asc > 0 ? (hs.home.ascensions[asc - 1] || {}).text || '' : '无修正 · 基准巡途', { fontSize: '10px', color: '#5a4a30', fontFamily: 'serif', wordWrap: { width: 138 }, align: 'center' }).setOrigin(0.5).setDepth(12));
// 出巡/每日(靶 homeStart/homeDaily 定死 y0.62/y0.72)。
// 下半按钮区(缺点③补完:上轮只国风化了上半,四主按钮仍是黑底金边方钮浮在死黑上)。现先铺一方
// 浅米册页卷轴托(与职业卡同款册页语汇),四按钮成组落在册页上,不再各自悬空;启程出巡为主 CTA,
// 另加描金外飘框 + 四角云纹加重,与三个次级按钮拉开层次——去「四个等重方钮」。靶位一格不动。
skin.panel(L, VIEW_W / 2, VIEW_H * 0.72, 330, 232, { radius: 16 });
// 启程出巡:主 CTA(朱漆按钮)+ 描金外飘框 + 四角云纹(先画托再画钮,钮压托上)。
skin.textButton(L, VIEW_W / 2, VIEW_H * 0.62, 240, 56, '启程出巡', { variant: 'primary', size: 20 });
{
const bx = VIEW_W / 2, by = VIEW_H * 0.62, bw = 240, bh = 56;
const cf = keep(scene, scene.add.graphics().setDepth(11)); // 压册页托与钮面之上,只描外框不遮标签
cf.lineStyle(1.6, GOLD, 0.9); cf.strokeRoundedRect(bx - bw / 2 - 5, by - bh / 2 - 5, bw + 10, bh + 10, 13);
for (const [sx, sy] of [[-1, -1], [1, -1], [-1, 1], [1, 1]]) {
const px = bx + sx * (bw / 2 + 5), py = by + sy * (bh / 2 + 5);
cf.lineStyle(2, GOLD, 0.95); cf.beginPath(); cf.moveTo(px + sx * 12, py); cf.lineTo(px, py); cf.lineTo(px, py + sy * 12); cf.strokePath();
cf.fillStyle(GOLD, 0.9); cf.fillCircle(px, py, 2);
}
}
// 每日一巡(次级,靶 homeDaily y0.72)。
skin.textButton(L, VIEW_W / 2, VIEW_H * 0.72, 240, 48, `每日一巡 · ${hs.home.daily.date}`, { variant: 'jade', size: 14, sub: m.daily.bestScore > 0 ? `本地最佳 ${m.daily.bestScore}` : '固定种子 · 天下同题', subColor: '#cfeee0' });
// 图鉴/成就入口(靶 homeCollection/homeAchievements 定死 x=±90/y0.82)。
// 图鉴/成就入口(次级,靶 homeCollection/homeAchievements x=±90/y0.82)。
skin.textButton(L, VIEW_W / 2 - 90, VIEW_H * 0.82, 150, 44, `图鉴 ${m.collection.cards + m.collection.relics + m.collection.enemies}`, { variant: 'secondary', size: 13 });
skin.textButton(L, VIEW_W / 2 + 90, VIEW_H * 0.82, 150, 44, `成就 ${m.achievedCount}/40`, { variant: 'secondary', size: 13 });
}