0

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

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

4

2 回答 2

0

您需要在脑海中想象互动。当距离正好为零时,物体会反弹并开始彼此远离。

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

这将适应您拥有的任何低 fps(直到它们滞后到如此严重以至于在您检测到碰撞之前它们互相穿过:-p

于 2012-05-30T13:27:14.627 回答
0

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

于 2012-05-30T13:27:33.473 回答