比较if语句中的两个数字范围?

时间:2017-11-07 00:00:57

标签: java if-statement sprite

我试图想出一种比较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;

}

1 个答案:

答案 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);
  }