获取对象上的碰撞位置

Get get collision location on object

我尝试使用 C# 制作 Pong 类视频游戏。

基本游戏对我来说效果很好,但我想将球拍分成多个区域。 每个区域都应该单独移动球。

问题是,我真的不知道如何获得球拍的正确区域。 例如:

if (collision >= 50px){move ball in direction A}
else if (collision <= 100px && collision > 50px){move ball to direction B}

我尝试使用 Bounds 的 Y 值,但没有用。

我尝试的下一步是获取球的位置和桨的位置以计算区域。

感谢您的帮助。

部分问题是您没有考虑到所有情况,例如 (collision >= 50px) 可以是 true 并且 (collision <= 100px && collision > 50px) 也可以是 true 当 collision == 75

如果你想严格确定你的球在哪个区域,你必须使用更像这样的条件(我假设你的变量 collision 是一个整数)

if (collision >= int.MinValue && collision <= 50 ) // Move A
else if (collision > 50 && collision <= 100 ) // Move B
else if (collision > 100 && collision <= 150 ) // Move C
// Next areas...
else if (collision > 250 && collision <= int.MaxValue) // Move G

只要尝试在每一时刻只获得一个条件为真,你就会得到正确的区域。希望对你有帮助。

我自己解决了。

我得到了桨的Y位置和球的Y位置。 然后我通过球拍 Y 位置减去球 Y 位置得到了我想要的值。

这里是一段真实的源代码:

//contact with right paddle
        else if (ball.Bounds.IntersectsWith(paddle2.Bounds))
        {
            double paddle2_locationvar = paddle2.Top;
            paddle2_Bounds_text.Text = paddle2_locationvar.ToString() + " " + ball.Top.ToString();

            double ball_locationvar = ball.Top;

            double zonevar = ball_locationvar - paddle2_locationvar;

            paddle2_Bounds_text.Text = zonevar.ToString();

            timer5.Stop();

            //zones
            if (zonevar <= 12.571)
            {
                ballx = ballx * -1;
                bally = 6;
                timer5.Start();
            }
            else if (zonevar > 12.571 && zonevar <= 25.142)
            {
                ballx = ballx * -1;
                bally = 4;
                timer5.Start();
            }
            else if (zonevar > 25.142 && zonevar <= 37.713)
            {
                ballx = ballx * -1;
                bally = 2;
                timer5.Start();
            }
            else if (zonevar > 37.713 && zonevar <= 50.284)
            {
                ballx = ballx * -1;
                bally = 0;
                timer5.Start();
            }
            else if (zonevar > 50.284 && zonevar <= 62.855)
            {
                ballx = ballx * -1;
                bally = -2;
                timer5.Start();
            }
            else if (zonevar > 62.855 && zonevar <= 75.426)
            {
                ballx = ballx * -1;
                bally = -4;
                timer5.Start();
            }
            else if (zonevar > 75.426 && zonevar <= 88)
            {
                ballx = ballx * -1;
                bally = -6;
                timer5.Start();
            }
            else
                ballx = ballx * -1;

非常感谢您的努力。

祝你有愉快的一天