 joywayerandClaude Opus 5
|
ffc75acead
|
docs(spec): §5.6 触发条件改为弹数阈值 + 新增 §5.7 退避墙钟不免疫时间缩放
§5.6:把重新立项的触发条件从场景描述改为可直接计算的弹数阈值 —— 成本严格线性于
「同帧创建且首次选目标全部失败的归航弹数」约 9.5µs/颗,附 200/500/1000/1750 颗的
对照表,约 1750 颗为理论击穿点(MAX_BULLETS=2048 故容量内可达)。并注明 visited
类场景因 visited_targets 线性扫描,实测高于线性外推,实际击穿点更低。
§5.7 新增潜在项(休眠,不修):退避基于 Time.get_ticks_msec() 是墙钟,不受
Engine.time_scale 影响,而 TimeManager 正是为慢动作/冻结时间 Core 驱动 time_scale 的。
grep 确认 set_time_scale 当前零调用方,故今日无害;若落地 0.2× 慢动作,200ms 只跨
约 2.4 个物理帧而非 12,抖动摊薄失效,且表现为慢动作期间掉帧。
记录替代方案(触发时再实施):改用物理帧计数 HOMING_RETRY_FRAMES=12,免疫时间缩放、
略便宜、消除 ms↔帧量纲错配;项目已有现成的 TimeManager.game_tick 且注释明写不受
time_scale 影响,正合用。触发条件为 set_time_scale 出现第一个调用方。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-07-30 16:26:36 +08:00 |
|
 joywayerandClaude Opus 5
|
4ef8012b6e
|
docs: 首帧锁定尖峰决策为「接受」+ Task4 Step7 改为两场景单帧峰值回归守卫
spec §5.6:残余的首帧尖峰(1500 弹同帧创建且首次选目标全失败时 16~22ms)
决策接受不处理——触发条件是三个苛刻条件的合取属合成最坏情况、一次性不复发、
压下它需牺牲「首次锁定即时」的手感或改变归航/bounce 语义。附重新立项触发条件。
plan Task4 Step7:原只测「敌人全在射程外」,补上评审发现的更严重场景
「射程内全在 visited」(visited 只增不减故为永久状态);指标由 60 帧均值
改为单帧峰值——退避把成本摊成 1 重选帧 + 11 退避帧,均值会掩盖尖峰,
而帧预算 16.67ms 下尖峰才是玩家可见的。性质由决策关卡降级为回归守卫。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-07-30 16:15:01 +08:00 |
|
 joywayerandClaude Opus 5
|
5cc40e72e8
|
docs(spec): §5 补「朴素退避会同步而非打散」二次发现 + 抖动方案 + 单帧峰值对比
新增 §5.4「二次发现」:固定退避下尖峰每 12 帧复发(附逐帧耗时序列证据),
根因是同帧失败的子弹到期时刻相同、被退避锁进同相;这与「退避能摊薄尖峰」的
直觉相反,且摊薄均值会掩盖它 —— 后来人写类似退避/重试逻辑会踩同一个坑,故写清。
含抖动实现、为何用占比式而非 bullet_idx % 窗口宽度、HOMING_RETRY_MS 一值两用的理由。
§5.5 抖动前后单帧峰值对比表(稳态峰值全部回到帧预算内,超预算帧数 0/39)。
§5.6 记录残余:初次锁定帧(1500 弹 16.2/22.0ms)非退避问题,而是「首次锁定即时」
手感属性的直接结果,压下它需牺牲手感,属设计决策,未擅自处理。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-07-30 16:13:00 +08:00 |
|
 joywayerandClaude Opus 5
|
3bf04c9fc0
|
docs(spec): R-H1 由「暂不实现」改为「已实测触发并启用」,补两种病态状态实测数据
如实记录:
- 原风险分析只预见「敌人全在射程外」,漏掉「射程内敌人全在 visited_targets 里」——
后者经 bounce+homing 组合是该子弹的永久状态而非瞬态,且成本更高,是本次发现;
原文把 R-H1 定性为瞬态尖峰不准确。
- 实测两种场景在 300 弹规模已达 3.14 / 4.34 ms,越过本节自定的 2.0 ms 触发线,
故方案 3(0.2s 退避)随 Task 2 落地,摊薄约 12×。
- 残余未收敛项另立 §5.4:1500 弹摊薄后仍 3.9 / 4.5 ms,且退避会使同波齐射的
子弹同步重试、留下 15.9 / 22.2 ms 单帧尖峰;错帧方案待决策,本次未擅自扩大范围。
§2.4 补一句指向 §5,避免「一生只查 1–2 次」与失败路径重试自相矛盾。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-07-30 16:04:03 +08:00 |
|
 joywayerandClaude Opus 5
|
049d1dda1b
|
docs(spec): E1-③ 子弹归航设计——受限角速度中度制导 + 锁定式目标 + 删除无人消费的位置快照
手感定位为中度制导:homing_strength 即最大转向角速度(rad/s),
单层词条 3.0(350 速度下转弯半径 117px),rotated() 保持速率不变。
目标策略为发射后锁定,仅在目标死亡(get_pos_by_id 返回哨兵)或首帧时
经 _find_nearest_unvisited 重选,配 get_active_count()==0 空场守卫,
避免 query_circle(r=400, 约196格且每次新建数组)进入每帧热路径。
与 bounce 协同:bounce 命中重定向时改写 homing_target_id,
由 bounce 选目标、homing 追上去;复用 visited 过滤规避"绕已命中敌打转"死循环。
偏离路线图原文:锁定语义需 entity_id,而 _enemy_pos_snapshot 按槽位存位置
不含 id,无法支撑,故快照连同 EnemyManager.fill_pos_snapshot 一并删除
(全项目唯一调用方),净减每帧 O(敌人数) 开销。
顺带补设计器 MODIFIER schema 遗漏的 bounce 字段(现掉在 JSON 逃生舱里)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-07-30 13:36:42 +08:00 |
|