You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AABB矩形碰撞检测向右移动正常但向左移动异常问题求解

问题排查与修复方案

核心问题根源

你当前的碰撞检测逻辑只判断了水平方向的位置关系,缺少垂直方向的重叠校验,导致和玩家不在同一垂直范围的方块也会错误触发碰撞判定。

  • 现有代码的判断条件仅校验了x轴的相对位置和玩家移动方向,没有校验玩家和方块在y轴上是否存在重叠,只要x坐标符合判定规则,哪怕玩家和方块在y方向完全错开,也会触发碰撞阻挡,这就是同Y坐标的两个方块缝隙中左移被误阻挡的原因:此时相邻的另一个方块虽然和你没有垂直重叠,但x方向满足左移碰撞的判定条件,直接把你卡住。

修复后的代码

在原有的判断条件前增加AABB碰撞必备的Y轴投影重叠校验即可:

# 预计算Y轴重叠条件,两个方向判断可复用
y_overlap = (p1.y < block.y + block.height) and (p1.y + p1.height > block.y)

# 玩家在方块左侧,向右移动碰撞
if y_overlap and p1.x + p1.width / 2 < block.x and p1.dx > 0:
    p1.dx = 0
    p1.x = block.x - p1.width
# 玩家在方块右侧,向左移动碰撞
elif y_overlap and p1.x + p1.width/2 > block.x + block.width and p1.dx < 0:
    p1.dx = 0
    p1.x = block.x + block.width

补充说明

  • 你可以根据实际的坐标、宽高定义调整Y重叠的判断阈值,如果需要像素级精确碰撞直接使用上述逻辑即可,如果需要宽松一点的判定,可以给两边各加减1-2像素的容差。
  • 原有用玩家中心X坐标做判断的逻辑本身没有问题,加上Y重叠校验后就不会触发非同一垂直层面的误碰撞,两个方块之间的缝隙只要宽度足够玩家通过,就不会再被错误阻挡。

内容的提问来源于stack exchange,提问作者IronJaybo123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:42:02