2D球碰撞和分辨率

时间:2012-05-30 13:22:07

标签: c# collision

我创建了一种简单的方法,通过计算距离来检测两个球之间的碰撞。我想知道,一旦检测到碰撞,我怎么能更新球位置以不让球相互进入(相交)

    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仅用于保存计算值。我用箭头键(球员)控制两个球,我不希望它们互相反弹,但只是不让它们相交。

2 个答案:

答案 0 :(得分:0)

你需要想象你头脑中的互动。当距离正好为零时,物体会反弹并开始相互远离。

大学计算新的轨迹已经太久了但是主要的是,如果radA + radB - fDist是-4,那么你需要将新的距离设置为radA + radB + 4。

这将适应你所拥有的任何低fps(直到它们变得非常糟糕以至于它们在你能够发现碰撞之前彼此通过:-p

答案 1 :(得分:0)

关于这类物理的一些好建议我会阅读这篇博文: http://www.wildbunny.co.uk/blog/2011/04/06/physics-engines-for-dummies/