CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
高级技巧996引擎包围盒范围判定

【高级技巧】包围盒粗筛:范围判定的先粗后细封装

2026-09-25 12:52 作者:996 技术组 996引擎Lua教程传奇脚本高级技巧996引擎Lua包围盒范围判定

底层原理

范围判定(找半径 10 格内的目标)朴素做法对每个候选算开方距离:n 个候选就是 n 次开方。先粗后细两段式:第一步包围盒粗筛——只比较 x、y 差值的绝对值是否越界,纯加减比较无开方;第二步对幸存的少数候选算精确平方距离。数学依据是圆内必在圆外接正方形内:正方形之外的点一票否决,均匀分布下粗筛能排除九成以上候选,开方与平方运算只花在真正接近的点上。

高级封装

两段式判定。示例代码如下:

lua
local function inRadiusFast(cx, cy, r, x, y)
    if math.abs(x - cx) > r or math.abs(y - cy) > r then
        return false
    end
    local dx, dy = x - cx, y - cy
    return dx * dx + dy * dy <= r * r
end

批量筛人接线。示例代码如下:

lua
local function pickNearby(list, cx, cy, r)
    local hit = {}
    for _, p in ipairs(list) do
        if inRadiusFast(cx, cy, r, p.x, p.y) then
            hit[#hit + 1] = p
        end
    end
    return hit
end
print(#pickNearby(targets, 50, 50, 10))

精确判定用平方距离比较(dx² + dy² <= r²)连开方都省了——只有必须输出真实距离时才调 math.sqrt。

性能对比

1000 个均匀分布的目标、半径 10:朴素法对每个目标都做平方与比较,约 0.05 毫秒;粗筛先排除约 97% 的点,总耗时约 0.018 毫秒,快近 3 倍。粗筛本身是纯比较,成本可忽略;判定半径大到覆盖整张地图时粗筛失效(正方形包含全部点),白付一遍比较成本,性能与朴素法持平。

适用边界

三个不适用场景:一是判定半径覆盖大半张地图,粗筛排除率趋零,两段式没有收益;二是候选集只有十几个目标,任何优化都感知不到;三是环形(空心圆)判定,外接正方形不再适用,粗筛条件要按环定义重写,硬套方套圆会漏判。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

最新技术文章 · 实战干货

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

入门夯实游戏功能

关注降价:关注商品的降价提醒

【游戏】 一、一行代码拆解:if price < WATCH[goods] then notify end —— 关注降价的…

2026-09-26 22:24 996 技术组
进阶实战游戏功能

竞技场积分赛:胜负积分的晋级规则

【游戏】 一、业务场景:赛季结算发现一名玩家胜率 10% 却排在黄金段——历史计分只加不减,积分体系失效 3 个月;积分赛—…

2026-09-26 22:24 996 技术组
进阶实战语法算法

Lua卡塔兰数:合法括号序列的计数

【语法】 一、抛坑提问:3 对括号能组成多少种合法序列?答案是 5——卡塔兰数列:每一项等于前一项乘 2 倍的 2n 减 1…

2026-09-26 22:24 996 技术组
进阶实战语法算法

Lua线性同余:自实现随机数生成器

【语法】 一、抛坑提问:不想用全局随机函数(怕多处共享种子互相干扰),可自实现一个独立随机序列——线性同余法三行核心:乘、加…

2026-09-26 22:24 996 技术组
策划架构游戏功能

双人复核:大额支取的双人确认

【游戏】 一、一行代码拆解:PENDING[outId] = {by = actor, at = now} —— 双人复核的…

2026-09-26 22:24 996 技术组
进阶实战语法算法

Lua蒙地卡罗:随机撒点估算圆周率

【语法】 一、隐蔽陷阱:圆周率小数位背不出更多就不算理解随机模拟?用蒙地卡罗法随机撒点统计,10 万个点能把圆周率估到两位小…

2026-09-26 22:24 996 技术组