0

这是我在打砖块中的球碰撞代码:

Rectangle intersection = Rectangle.Intersect(block.Rect2D, ball.BallRec);

if (intersection.Width > intersection.Height)
{
    ball.yVel = -ball.yVel;
}
else if (intersection.Width < intersection.Height)
{
    ball.xVel = -ball.xVel;
}
else
{
    ball.xVel = -ball.xVel;
    ball.yVel = -ball.yVel;
}

不幸的是,球有时会“融化”到积木中并奇怪地弹跳,尤其是在高速时。我该如何解决?

4

1 回答 1

1

当检测到碰撞时,仅仅改变球的方向是不够的,你还需要改变位置。如果球移动了 20 个像素,现在是 5 个像素进入块,那么您需要将球移动 5 个像素远离块。

您还需要检查您正在检测碰撞的块是否球的旧位置和新位置之间。

于 2013-02-14T16:25:15.797 回答