2017-08-13 3 views
2

私はマップを構築しています。壁、カメラ、ドアなどのノードを追加しようとしています...これらはすべて長方形などの形状で構成されていますが、私は衝突の検出アルゴリズムに問題がありますので、形状の衝突をチェックすることができますが、形状が派生したクラスを教えようとすると問題になります(例えば、ドアの長方形または壁)どのような行動を取る必要があります。クラスとその中のシェイププロパティを初期化する方法は?

public class Door { 

    private int x, y; 

    public Door(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    public Door getTarget() { 
     Door door = new Rectangle(x, y, 30, 20); 
     return door; 
    } 
} 

私は仕事とでgetTarget()メソッドを使用することなく、私に四角形を返すために、クラスのこの種を得ることができる方法はありますか?

public class Door extends Rectangle { 

    public double x,y; 
    public Rectangle door; 

    public Door(double x, double y) { 
     this.x = x; 
     this.y = y; 
     door = new Rectangle(x, y, 30, 20); 
    } 

} 
+0

を....「でgetTarget()メソッドを使用することなく、私に矩形を返します"....だから、メソッドを呼び出すことなくオブジェクトから何かを取得する方法が欲しい...?なぜメソッドを悪く呼びますか?あなたは単にthis.doorを返すgetTarget()のゲッターを追加することができますか? – Adam

+0

私は私のプログラムのメインクラスで衝突検出アルゴリズムを持っています。アルゴリズムはShape配列をパラメータとして取ります(この配列はすべての扉の長方形など、すべてのノード形状を含んでいます。人間(円)がドア(矩形)に衝突したとしましょう。次に、人間のクラスで関数を呼び出して歩行方向を変更したいと考えていますが、アルゴリズムIに対して形状のみを解析したので人間のクラスそのものに方向性を変えるように伝える方法が分からない場合、私は行動を起こすために形だけを指示することができます。 – bigPoppa350

+0

私はここで本当にシンプルな解決策のように感じますが、私はそれを知りません... – bigPoppa350

答えて

1

あなたDoorはすでにRectangleを拡張し、あなたのDoorクラスでRectangleフィールドを必要はありません。 DoorRectangleになるとは、DoorRectangleであることを意味します。あなたがそうのような機能をチェックし、衝突があったのであれば:

public Boolean testCollision(Rectangle first, Rectangle second) { ... } 

あなたは、単にこのメソッドに任意のDoorオブジェクトを渡すことができます。

Door first = new Door() 
Door second = new Door() 
if (testCollision(first, second) { 
    // do stuff 
} 

あなたtestCollision方法で異なるRectangleタイプを区別する必要がある場合、あなたはキャストすることができます:

混乱
if (first instanceof Door) { 
    Door firstAsDoor = (Door)first; 
} 
関連する問題