fix: 修复打砖块游戏碰撞穿透bug,添加渐进提速机制

This commit is contained in:
lenn
2026-04-29 15:43:56 +08:00
parent 26533f6916
commit 326f07ed4f
23 changed files with 786 additions and 376 deletions

View File

@@ -32,6 +32,7 @@
export let matrixDisplayMode: MatrixDisplayMode = "dots";
export let summary: HudSummary | null = null;
export let showStatsPanel = true;
export let locale: "zh-CN" | "en-US" = "zh-CN";
let viewerEl: HTMLDivElement | undefined;
let canvasEl: HTMLCanvasElement | undefined;
@@ -131,8 +132,13 @@
$: resolvedRangeMin = resolvedRange.min;
$: resolvedRangeMax = resolvedRange.max;
$: matrixLayout = buildMatrixLayout(resolvedMatrixRows, resolvedMatrixCols);
$: statsModeLabel = matrixDisplayMode === "dots" ? "dot pulse" : "numeric pulse";
$: statsNote = `${resolvedMatrixRows}x${resolvedMatrixCols} / force range ${resolvedRangeMin}-${resolvedRangeMax} / ${statsModeLabel}`;
$: statsModeLabel = matrixDisplayMode === "dots"
? (locale === "zh-CN" ? "点阵脉冲" : "dot pulse")
: (locale === "zh-CN" ? "数字脉冲" : "numeric pulse");
$: statsNote = `${resolvedMatrixRows}x${resolvedMatrixCols} / ${locale === "zh-CN" ? "力量范围" : "force range"} ${resolvedRangeMin}-${resolvedRangeMax} / ${statsModeLabel}`;
$: viewerI18n = locale === "zh-CN"
? { title: "合力", current: "当前合力", max: "最大合力", min: "最小合力" }
: { title: "Resultant Force", current: "Current RF", max: "Max RF", min: "Min RF" };
function formatForceStat(value: number | null): string {
if (value == null || !Number.isFinite(value)) {
@@ -660,18 +666,18 @@
{#if showStatsPanel}
<div class="viewer-controls">
<section class="stats-panel" aria-label="Pressure Summary">
<p class="stats-label">Resultant Force</p>
<p class="stats-label">{viewerI18n.title}</p>
<div class="stats-grid">
<article class="stats-card stats-card-wide">
<span class="stats-key">Current RF</span>
<span class="stats-key">{viewerI18n.current}</span>
<strong class="stats-value">{formatForceStat(stats.current)}</strong>
</article>
<article class="stats-card">
<span class="stats-key">Max RF</span>
<span class="stats-key">{viewerI18n.max}</span>
<strong class="stats-value">{formatForceStat(stats.max)}</strong>
</article>
<article class="stats-card">
<span class="stats-key">Min RF</span>
<span class="stats-key">{viewerI18n.min}</span>
<strong class="stats-value">{formatForceStat(stats.min)}</strong>
</article>
</div>