2017-11-07 13 views
-2

私はifステートメントの2つの数値の範囲を比較する方法を見つけようとしています。私が取り組んでいるメソッドは、2つのスプライトが重なっているかどうかを調べるブール値を返します。現在、それらの位置を比較して実装することを考えています。スプライトは60X60で、xとyの位置は左上隅を参照します。if文の2つの数値範囲を比較しますか?

私はこれについて間違った方法をしていますか?そうでない場合は、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

をあなたたちを表示する一つの可能​​性は、Rectangle.intersects(x, y, w, h)

第1の幅と高さのために、いくつかの定数を定義を使用することですコードとあなたが試したこと。 – m0skit0

+0

'Point'(https://docs.oracle.com/javase/7/docs/api/java/awt/Point.html#equals%28java.lang.Object%29)でequalsメソッドを使用します。 – kalabalik

答えて

0

これを行う最も簡単な方法は、Javaライブラリですでに利用可能なものに活用することであってもよいです。

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); 
    } 
関連する問題