lili 85f48228cd
Some checks failed
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
feat(cheap-gen): W-AXIS 波3 知识层补强+收尾——tsc 顾问门+recipes+暗资产接线+n=5 基线台账
- 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>
2026-07-10 04:27:18 -07:00

1.9 KiB
Raw Blame History

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 后结算

别踩sceneupdate 回调只收 (dt) 一个参数——别臆造 update(running, dt)(写错 → dt 落到第二参=undefined → elapsedMs += undefined = NaN → 空转看着像没 bug 实则永不推进)。