0

距離を計算して 2 つのボール間の衝突を検出する簡単な方法を作成しました。衝突が検出されたら、ボールが互いに入らないようにボールの位置を更新するにはどうすればよいでしょうか (交差)

    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

このタイプの物理学に関する良いアドバイスについては、次のブログ記事をお読み ください。

于 2012-05-30T13:27:33.473 に答える
0

相互作用を頭の中でイメージする必要があります。距離がちょうどゼロになると、オブジェクトは跳ね返り、互いに遠ざかり始めます。

大学で新しい軌道を計算するのに時間がかかりすぎましたが、重要なことは、radA + radB - fDist が -4 の場合、新しい距離を radA + radB + 4 に設定する必要があるということです。

それは、あなたが持っている低いfpsに対応します(衝突を検出する前に、それらが非常に遅れて互いに通過するまで:-p

于 2012-05-30T13:27:14.627 に答える