获取对象上的碰撞位置
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;
非常感谢您的努力。
祝你有愉快的一天
我尝试使用 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;
非常感谢您的努力。
祝你有愉快的一天