- tsc 顾问门:typescript devDependency + tsc-advisory 测试档;顾问性(永不阻断), 金标 10 款零误伤抽验 - recipes/ 五篇高频场景索引(命中矩形/计时器/资产回退/场景机/结算演出,「抄这段形态 +头号病根」)+ littlejs-game-dev §0.5 卡壳就查接线 - 暗资产接线:plugin-capability-map(11 注入+1 取证+6 储备逐件裁定)+ engine-capabilities-brief(≤3KB 蒸馏)+ api.d.ts/game-host.d.ts 补插件指针; 三方一致性对账门 plugin-surface-gate.py(含 cwd 锚定修)挂 pre-commit+Gitea Actions - hard_genre_batch 参数化(五品类 n=5 批跑驱动,checkpoint 续跑) - n=5 基线台账入库(gitignore 例外 add -f,只入台账不入游戏产物): wax-baseline.jsonl 25 局逐局记录(含判定仪器订正批注:cap1500 重判/图像盲 M3 重判, 只加字段零改值)——终数:操作口径 14/25=56%、质量口径 18/25=72%; 品类 narrative/heritage 5/5、trpg 4/5、puzzle/sim-business 2/5(缺口逐局有名有姓, 根因见 07-10 v2 plan §1);旧「80%/39%」口径正式作废存照 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1.9 KiB
1.9 KiB
recipe: 计时器 / 倒计时 / spawn 间隔 / 耐心递减
要做:一局限时倒计时、每隔 N 秒刷一个顾客/敌人、顾客耐心随时间掉。
病根九成在这:update(dt) 的 dt 单位是「秒」(≈1/60),但你的计时常量常写成毫秒(倒计时 60000、spawn 间隔 1300、耐心 6000)。直接 elapsedMs += dt → 慢 1000 倍 → 永远到不了 spawn 阈值 → 零顾客、一局永不结束(计时显示还可能是 NaNs)。
两条换算铁律:
- 自己累加毫秒:
elapsedMs += dt * 1000(漏 ×1000 是头号翻车)。 - 用
timerScheduler:它收毫秒——3 秒写after(3000, cb)、每秒写every(1000, cb)(别写after(3);与 dt=秒相反,别混)。 - 无论哪种,
update(dt)内必须bundle.tick(dt),否则插件 onFrame/timer 全不推进、timer 永不到期、一局不结束。
抄这段形态(自累加毫秒版):
const ROUND_MS = 60000; // 一局 60 秒(毫秒常量)
const SPAWN_MS = 1300; // 每 1.3 秒来一个客
update(dt) {
bundle.tick(dt); // ★必调,否则一切计时不动
if (sceneFsm.current() !== 'play') return;
const ms = dt * 1000; // ★秒 → 毫秒
this.remainMs -= ms;
this.spawnAcc += ms;
if (this.spawnAcc >= SPAWN_MS) { this.spawnAcc -= SPAWN_MS; this.spawnCustomer(); }
if (this.remainMs <= 0) sceneFsm.transition('over'); // 时间到 → 结算
}
抄这段形态(timerScheduler 版,波次刷新):
timerScheduler.every(1300, () => this.spawnCustomer()); // 毫秒!每 1.3s 一个
timerScheduler.after(60000, () => sceneFsm.transition('over')); // 60s 后结算
别踩:scene 的 update 回调只收 (dt) 一个参数——别臆造 update(running, dt)(写错 → dt 落到第二参=undefined → elapsedMs += undefined = NaN → 空转看着像没 bug 实则永不推进)。