这是我在arkanoid中碰撞球的代码:
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;
}
不幸的是,球有时会“融化”到滑块中并且很奇怪地反弹,特别是当它以更高的速度运动时。我该如何解决这个问题?
答案 0 :(得分:1)
当检测到碰撞时,仅改变球的方向是不够的,您也需要改变位置。如果球移动20个像素,并且现在是5个像素进入块,那么你需要将球从块移动5个像素。
你还需要检查你正在检测碰撞的区块是在球的旧位置和新位置之间。