我试图想出一种比较if语句中两个数字范围的方法。我正在处理的方法返回一个布尔值,看看两个精灵是否重叠,我目前正在考虑通过比较它们的位置来实现它。精灵是60X60,它们的x和y位置参考它们的左上角。
我是以错误的方式来做这件事的吗?如果没有,最好的方法是通过if语句来比较这些范围吗?
编辑: 这是我的尝试。我认为它有效,但似乎并不总是正确地重复重叠。
public boolean overlaps(Sprite s)
{
if ( (s.getX() >= this.getX()) && (s.getX() <= (this.getX() + 60)) )
{
if ( (s.getY() >= this.getY()) && (s.getY() <= (this.getY() + 60)) )
{
return true;
}
else if ( (s.getY() + 60) >= this.getY() && ((s.getY() + 60) <= (this.getY() + 60)) )
{
return true;
}
}
else if ( (s.getX() + 60) >= this.getX() && ((s.getX() + 60) <= (this.getX() + 60)) )
{
if ( (s.getY() + 60) >= this.getY() && ((s.getY() + 60) <= (this.getY() + 60)) )
{
return true;
}
else if ( (s.getY() >= this.getY()) && (s.getY() <= (this.getY() + 60)) )
{
return true;
}
}
return false;
}
答案 0 :(得分:0)
最简单的方法可能是利用Java库中已有的功能。一种可能性是使用Rectangle.intersects(x, y, w, h)
首先为宽度和高度定义一些常量:
public class Sprite
{
private static final int SPRITE_WIDTH = 60;
private static final int SPRITE_HEIGHT = 60;
然后使用overlaps
方法实现intersects
应该非常简单:
public boolean overlaps(Sprite s)
{
Rectangle r1 = new Rectangle(this.getX(), this.getY(), SPRITE_WIDTH, SPRITE_HEIGHT);
Rectangle r2 = new Rectangle(s.getX(), s.getY(), SPRITE_WIDTH, SPRITE_HEIGHT);
return r1.intersects(r2);
}