我的结构中充满了由用户在屏幕上绘制的矩形,意味着“阻挡”球在运行时反弹。我考虑过使用Rectangle.intersects()
,但意识到(除非我的消息不够充分),当intersects
返回true时,无法确定球的走向。目前我正在使用这一大块逻辑来尝试检测球何时触及给定矩形的边缘,并且它根本不能正常工作。如果有更好的方法来做到这一点,或者如果有办法解决下面的逻辑,我愿意听到有关此的任何建议。谢谢!
for (Rectangle rect : r)
{
int rx = rect.x;
int ry = rect.y;
int rh = rect.height;
int rw = rect.width;
//If the ball hits either side of the rectangle, change the x direction
if((loc.x > rx && loc.x > ry && loc.x < (ry + rh))||(loc.x < (rx + rw) && loc.x > rx && loc.x <(ry + rh)))
{dx *= -1;}
//If the ball hits either the top or bottom, change the y direction
if((loc.y > ry && loc.y > rx && loc.y < (rx + rw))||(loc.y < (ry + rh) && loc.y > ry && loc.y <(rx + rw)))
{dy *= -1;}
}
作为参考,为了使其更具可读性,r是包含所有绘制矩形的Vector,loc是球当前所在的点,dx和dy是球移动的方向(1或 - 1)。