我正在游戏中实现碰撞检测,并且在理解如何计算矢量以修复碰撞时形状重叠时遇到了一些麻烦。
举例来说,我有两个正方形。 squareA
和squareB
。对于他们两个,我都知道他们的xCo
,yCo
,width
和height
。但是squareA
正在移动,因此他的速度为magnitude
,速度为angle
。假设我每秒更新一次游戏。我在下面说明了这种情况。
现在,我需要一个公式来获取向量以修复重叠。如果我将此向量应用于红色正方形(squareA
),则它们不应再重叠。这就是我想要实现的目标。
谁能帮我找出计算向量的公式?
如果使用Java构造,则奖励积分。
如果您输入答案而不是链接到碰撞检测教程,则可获得额外积分。
多谢你们!
另外,如何计算新的速度magnitude
和angle
?我希望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)
我只是即时编写此代码,因此还有很多改进的余地...从不使其递归开始。
当检测到碰撞时,将调用该函数,将对象的最后一个有效位置和当前无效位置作为参数传递。
在每次迭代中,第一个参数始终有效(没有分类),第二个参数无效(有分类)。
但是我认为这可以为您提供一个可能的解决方案的想法,因此您可以使其适应您的需求。