【问题标题】:Comparing two ranges of numbers in an if statement?比较 if 语句中的两个数字范围?
【发布时间】:2017-11-07 00:00:56
【问题描述】:

我试图找出一种方法来比较 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;

}

【问题讨论】:

标签: java if-statement sprite


【解决方案1】:

最简单的方法可能是利用 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);
  }

【讨论】:

    猜你喜欢
    • 2016-01-21
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 2013-10-21
    • 1970-01-01
    • 2016-08-17
    • 2017-07-02
    相关资源
    最近更新 更多