我正在游戏中实现碰撞检测,并且在理解如何计算矢量以修复碰撞时形状重叠时遇到了一些麻烦。

举例来说,我有两个正方形。 squareAsquareB。对于他们两个,我都知道他们的xCoyCowidthheight。但是squareA正在移动,因此他的速度为magnitude,速度为angle。假设我每秒更新一次游戏。我在下面说明了这种情况。





现在,我需要一个公式来获取向量以修复重叠。如果我将此向量应用于红色正方形(squareA),则它们不应再重叠。这就是我想要实现的目标。



谁能帮我找出计算向量的公式?

如果使用Java构造,则奖励积分。

如果您输入答案而不是链接到碰撞检测教程,则可获得额外积分。

多谢你们!

另外,如何计算新的速度magnitudeangle?我希望sqaureA继续沿x轴移动(沿蓝色正方形的顶部滑动)

最佳答案

我有一个看起来像这样的函数:

Position calculateValidPosition(Position start, Position end)
    Position middlePoint = (start + end) /2

    if (middlePoint == start || middlePoint == end)
        return start

    if( isColliding(middlePont) )
        return calculateValidPosition(start, middlePoint)
    else
        return calculate(middlePoint, end)


我只是即时编写此代码,因此还有很多改进的余地...从不使其递归开始。

当检测到碰撞时,将调用该函数,将对象的最后一个有效位置和当前无效位置作为参数传递。
在每次迭代中,第一个参数始终有效(没有分类),第二个参数无效(有分类)。

但是我认为这可以为您提供一个可能的解决方案的想法,因此您可以使其适应您的需求。

09-10 05:44
查看更多