我创建了一个简单的方法,通过计算距离来检测两个球之间的碰撞。我想知道,一旦检测到碰撞,我怎么可以更新球位置不允许球进入对方(交叉)2D球碰撞和解析
private void BallCollisionBlueRed()
{
double fDist;
CentreAX = redBall.Left + ball.Width/2;
CentreAY = redBall.Top + ball.Height/2;
CentreBX = blueBall.Left + ball.Width/2;
CentreBY = blueBall.Top + ball.Height/2;
vDx = CentreBX - CentreAX;
vDy = CentreBY - CentreAY;
fDist = Math.Sqrt((vDx * vDx) + (vDy * vDy));
if (fDist < radA + radB)
{
// Help!
}
}
VDX和VDY只用于保存计算值。我用箭头键(球员)控制两个球,我不希望他们互相反弹,但不让他们相交。
你在哪里设置球的运动矢量?应该改变d一旦你发现碰撞。 – Shai
很难说没有关于程序其余部分的任何信息,你可以“重置”球的位置,使其不与每个球员相交,或者尝试一些物理(这是我会做的),并计算每个球并反转它们(保持线性动量)。 – Alex