From 4b09cd10648b0a713dbae431f2d00cdc6a41c820 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Thu, 30 Jul 2026 17:32:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(homing):=20=E6=8A=96=E5=8A=A8=E5=85=AC?= =?UTF-8?q?=E5=BC=8F=E7=9A=84=E6=95=B4=E6=95=B0=E9=99=A4=E6=B3=95=E5=8A=A0?= =?UTF-8?q?=20@warning=5Fignore=EF=BC=8C=E6=B6=88=E6=8E=89=20INTEGER=5FDIV?= =?UTF-8?q?ISION=20=E5=91=8A=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (bullet_idx * HOMING_RETRY_MS) / maxi(1, _active_count) 的截断是有意的 —— 抖动只需毫秒粒度的偏移,小数部分丢弃即所需语义。加注解让编辑器面板对 项目文件保持零告警,使验收标准⑩「无告警」真正成立。 行为不变(注解为编译期),复测:①②③ FAILS=0 / ah=0.25000 / max_step=0.050000 / 速率 350.0000;1500 弹同帧集体失败的到期时刻跨度 223ms、222 个互异值,抖动照常生效。 Co-Authored-By: Claude Opus 5 --- scripts/autoloads/bullet_manager.gd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/autoloads/bullet_manager.gd b/scripts/autoloads/bullet_manager.gd index d79386f..f3ff5fc 100644 --- a/scripts/autoloads/bullet_manager.gd +++ b/scripts/autoloads/bullet_manager.gd @@ -260,6 +260,8 @@ func _apply_homing(bullet_idx: int, base: int, delta: float) -> void: # 用「bullet_idx 在活跃弹数中的占比」而非 bullet_idx % HOMING_RETRY_MS:后者在 # 弹数少于窗口宽度时只铺开 _active_count 毫秒(20 颗弹 → 20ms ≈ 1.2 帧,等于没 # 打散),占比式则不论弹数多少都铺满整窗。到期时刻落在 [200, 400) ms。 + # 整数除法是有意的:抖动只需毫秒粒度的偏移,小数部分丢弃即所需语义 + @warning_ignore("integer_division") var jitter: int = (bullet_idx * HOMING_RETRY_MS) / maxi(1, _active_count) # 取模在循环内不可达(bullet_idx < _active_count ⟹ jitter ≤ 199),仅作索引越界兜底 cold["homing_retry_at"] = now + HOMING_RETRY_MS + jitter % HOMING_RETRY_MS