我正在游戏中实现碰撞检测,并且在理解如何计算矢量以在碰撞时修复我的形状重叠时遇到了一些麻烦。
比方说,我有两个正方形。 squareA
和squareB
。对于他们两个人,我知道他们的xCo
,yCo
,width
和height
。 squareA
正在移动,因此他的速度为magnitude
,速度为angle
。让我假装我每秒更新一次游戏。我已经说明了下面的情况。
现在,我需要一个公式来获取向量来修复重叠。如果我将此向量应用到红色方块(squareA
)上,它们不应再重叠。这就是我希望实现的目标。
任何人都可以帮我找出计算向量的公式吗?
如果使用Java构建奖励积分。
如果您输入答案而不是链接到碰撞检测教程,则可获得奖励积分。
谢谢你们!
另外,如何计算新的速度magnitude
和angle
?我希望sqaureA
继续沿x轴移动(沿蓝色方块的顶部滑动)
答案 0 :(得分:0)
我的功能看起来像这样:
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)
我刚刚制作了这段代码,因此会有很大的改进空间......首先不要让它递归。
当检测到碰撞时,将调用此函数,将参数作为参数传递给对象的最后一个有效位置,以及当前的无效位置。 在每次迭代中,第一个参数始终有效(无碰撞),第二个参数无效(存在碰撞)。
但我认为这可以让您了解可能的解决方案,因此您可以根据自己的需要进行调整。
答案 1 :(得分:0)
您提出的问题需要答案才是您的整个申请。但是一个简单的答案很容易提供。
最后,翻译A使k和j重合,K与Sk重合。