2D游戏中如何判断轴对齐正方形与圆形碰撞时对应的正方形侧边
你已经完成了碰撞核心计算,只需要基于已输出的碰撞法向量C.Normal补充判断逻辑即可,不需要修改原有已验证的碰撞计算逻辑,具体修改方案如下:
代码修改步骤
在你原有CircleRectIntersection函数中,C.Depth = R - D;这一行之后、return C;之前,添加下面的侧别判断代码即可:
// 补充碰撞侧判断逻辑 if (fabs(C.Normal.X) > fabs(C.Normal.Y)) { // X轴向碰撞 C.Side = C.Normal.X > 0 ? SideRight : SideLeft; } else { // Y轴向碰撞,适配你的Y轴向下坐标系 C.Side = C.Normal.Y > 0 ? SideBelow : SideAbove; } C.Collided = 1;
逻辑说明
- 你现有代码输出的
C.Normal已经是矩形指向圆形方向的碰撞法向量,天然可以用来判断碰撞方位:- 法向量X分量绝对值大于Y分量时,碰撞发生在左右侧,X为正对应矩形右侧被碰撞,X为负对应矩形左侧被碰撞
- 法向量Y分量绝对值更大时,碰撞发生在上下侧,Y为正对应矩形下侧被碰撞,Y为负对应矩形上侧被碰撞
- 边角碰撞场景下,逻辑会自动归属到投影分量更大的一侧,符合普通2D游戏的碰撞处理直觉,不需要额外做边角特殊判断。
验证效果
你给出的示例中,圆形中心在(150,100),矩形中心在(100,100),计算得到的C.Normal为(50, 0),最终会返回SideRight,完全符合你的预期。
内容的提问来源于stack exchange,提问作者Tom Tetlaw
相关产品推荐
相关产品推荐

