获取对象上的碰撞位置



我试图用C#制作一个类似乒乓球的视频游戏。

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

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

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

我尝试使用"边界"的Y值,但没有成功。

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

谢谢你的帮助。

问题的一部分是您没有考虑到所有场景,例如(碰撞>=50px(可以为真,并且当碰撞==75 时(碰撞<=100px&&碰撞>50px(也可以为真

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

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

只要试着在每一时刻只得到一个条件为true,你就会得到正确的区域。我希望它能有所帮助。

我能够自己解决它。

我得到了球拍的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;

非常感谢你的努力。

祝度过美好的一天

最新更新