SA 目标搜索 10 轮逐步扩大 AABB 全量实体扫描(含双重 expand 笔误)+ Drive 实体每 tick 双 selector 扫描与 O(n²) 已命中列表 #1

Closed
opened 2026-09-03 14:49:21 +00:00 by layue13 · 1 comment
Owner

问题描述

SAxianshizhan.getEntityToWatch(src/main/java/net/langball/last_smith/louguan/sa/SAxianshizhan.java:45-63):以 2 格步进、dist=2..18 共 10 轮循环,每轮 world.getEntitiesWithinAABB(Entity.class, bb) 全量实体扫描 + 对返回列表逐个 getDistanceToEntity,且每轮 player.boundingBox.expand(2.0, 0.25, 2.0) 调用了两次(:48 与 :50,疑似笔误,实际 expand 到 4.0/0.5/4.0),使第一轮扫描体积即远超预期,后续轮次体积线性放大。该扫描虽只在 SA 触发时执行一次,但每轮返回的列表包含所有非排除实体(含掉落物、经验球),10 轮最坏情况是同方向实体被重复扫描多次。

EntitySA.onUpdate(EntitySA.java:159-233):实体生命期内每 tick 两次 getEntitiesWithinAABBExcludingEntity(DestructableSelector + AttackableSelector,bb 基于 setSize(4.0f,4.0f)),命中列表用 List removeAll/contains(alreadyHitEntity ArrayList)做 O(n²) 线性匹配;每次销毁破坏物时内联 10 次 spawnParticle("explode", ...)。多把 SA 刀同时释放(Not10 式连发)时实体数与扫描成本成倍增长。

建议:getEntityToWatch 用单次 rayTraceEntities/扩大 AABB 一次扫描替代 10 轮循环并修掉双重 expand 笔误;alreadyHitEntity 换 Set(按 EntityId)。

### 问题描述 **SAxianshizhan.getEntityToWatch**(src/main/java/net/langball/last_smith/louguan/sa/SAxianshizhan.java:45-63):以 2 格步进、dist=2..18 共 10 轮循环,每轮 `world.getEntitiesWithinAABB(Entity.class, bb)` 全量实体扫描 + 对返回列表逐个 `getDistanceToEntity`,且每轮 `player.boundingBox.expand(2.0, 0.25, 2.0)` 调用了**两次**(:48 与 :50,疑似笔误,实际 expand 到 4.0/0.5/4.0),使第一轮扫描体积即远超预期,后续轮次体积线性放大。该扫描虽只在 SA 触发时执行一次,但每轮返回的列表包含所有非排除实体(含掉落物、经验球),10 轮最坏情况是同方向实体被重复扫描多次。 **EntitySA.onUpdate**(EntitySA.java:159-233):实体生命期内每 tick 两次 `getEntitiesWithinAABBExcludingEntity`(DestructableSelector + AttackableSelector,bb 基于 setSize(4.0f,4.0f)),命中列表用 `List removeAll/contains`(alreadyHitEntity ArrayList)做 O(n²) 线性匹配;每次销毁破坏物时内联 10 次 `spawnParticle("explode", ...)`。多把 SA 刀同时释放(Not10 式连发)时实体数与扫描成本成倍增长。 建议:getEntityToWatch 用单次 rayTraceEntities/扩大 AABB 一次扫描替代 10 轮循环并修掉双重 expand 笔误;alreadyHitEntity 换 Set(按 EntityId)。
Author
Owner

Archive 组织仓已过时(Daniel 2026-09-23),整组织 issue 统一关闭。

Archive 组织仓已过时(Daniel 2026-09-23),整组织 issue 统一关闭。
layue13 added the
type
perf
priority
p2
labels 2026-10-06 21:07:42 +00:00
layue13 changed title from [性能][中] SA 目标搜索 10 轮逐步扩大 AABB 全量实体扫描(含双重 expand 笔误)+ Drive 实体每 tick 双 selector 扫描与 O(n²) 已命中列表 to SA 目标搜索 10 轮逐步扩大 AABB 全量实体扫描(含双重 expand 笔误)+ Drive 实体每 tick 双 selector 扫描与 O(n²) 已命中列表 2026-10-06 21:07:42 +00:00
This repo is archived. You cannot comment on issues.
No labels
priority
p2
type
perf
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Archive/slashblade-lastsmith#1