2017-08-13 81 views
2

我建立一個地圖,並在其上,我試圖添加如牆壁,相機,門等節點......現在這些都是由形狀如矩形的,我已經做到了這一點,但我「M努力,因爲我有我的碰撞檢測算法故障返工它,因爲我可以檢查形狀之間的碰撞,但它使我的問題,當我試圖告訴從中形狀從(例如,矩形的門派生的類或牆)採取什麼行動。如何初始化一個類和一個shape屬性?

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()方法「......所以你想要一種從對象中獲取某些東西的方法,而不用調用方法......?爲什麼調用方法不好?你可以爲getTarget()添加一個getterget()來返回this.door? – Adam

+0

因此,我在我的程序的主類中有一個碰撞檢測算法,現在該算法將一個Shape數組作爲參數(此數組包含所有節點的形狀;例如所有門的矩形,我在程序中也有人類其使用例如圓圈)讓我們說一個人(圈子)與門(矩形),然後,我想打電話給在人類的功能改變了他的行走方向,但因爲我只解析形狀的算法我碰撞不知道如何告訴人類自己改變方向,我只能指示形狀做出行動。 – bigPoppa350

+0

我在這裏感覺就像那裏有一個非常簡單的解決辦法,但我瞎了吧... – bigPoppa350

回答

1

你不應該需要在DoorRectangle場,你Door已經延伸Rectangle。按說Door擴展Rectangle,這意味着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; 
}