2012-05-30 88 views
0

我创建了一个简单的方法,通过计算距离来检测两个球之间的碰撞。我想知道,一旦检测到碰撞,我怎么可以更新球位置不允许球进入对方(交叉)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只用于保存计算值。我用箭头键(球员)控制两个球,我不希望他们互相反弹,但不让他们相交。

+0

你在哪里设置球的运动矢量?应该改变d一旦你发现碰撞。 – Shai

+0

很难说没有关于程序其余部分的任何信息,你可以“重置”球的位置,使其不与每个球员相交,或者尝试一些物理(这是我会做的),并计算每个球并反转它们(保持线性动量)。 – Alex

回答

0

你需要在脑海中描绘交互。当距离恰好为零时,物体会反弹并开始远离彼此。

大学计算新轨迹的时间太长,但主要的事情是,如果radA + radB - fDist是-4,则需要将新距离设置为radA + radB + 4 。

,将为您有任何低帧率的适应(直到他们落后如此糟糕,他们通过对方,然后才能检测到冲突:-P