为了账号安全,请及时绑定邮箱和手机立即绑定

解决 2D 碰撞

解决 2D 碰撞

慕斯709654 2023-04-14 15:08:42
我正在制作游戏并且可以检测碰撞。我现在需要解决它们。我想要的是重叠 x 和 y 以便我可以否定它。获得重叠的形状。圆与圆。圆形和矩形。注意不需要旋转。关于堆栈溢出有一些答案,但没有一个是我想要的。我只需要重叠 x 和 y,仅此而已。
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

AABB 对比 AABB

我记得几年前在制作我的第一款涉及一点物理的游戏时为此苦苦挣扎。我在互联网上找不到任何相关信息,所以我制作了自己的算法。

您可以在函数中找到它AABB::detectCollision()。此函数检测 2 个 AABB 之间的重叠和碰撞边。我知道,它是 C++ 而不是 JS,但我相信您能够将它“翻译”成 JS。

请记住,在不考虑两个物体的速度的情况下检测碰撞永远不会非常精确,并且不会在高速下工作。

圆与圆

对于圆,就简单多了。

假设您有 2 个相交的圆圈:一个“固定”圆圈A和一个移动圆圈B

两个圆之间的重叠是通过计算它们之间的距离并减去它们的半径之和来计算的:

overlap = magnitude(A.pos - B.pos) - (A.radius + B.radius)

碰撞法线(碰撞需要解决的方向)是通过归一化两个圆圈之间的增量来计算的:

direction = normalize(B.pos - A.pos) // An arrow pointing from A to B

然后你通过添加到由重叠缩放的方向的位置B来移出。AB

B.position += direction * overlap


查看完整回答
反对 回复 2023-04-14
  • 1 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信