2013-05-15 48 views
2

我想爲我的遊戲設置一個碰撞處理程序,所以我不需要複製大量的代碼並保持存儲空間不足。在一個我會在課堂上學到的方法中,對於兩個特定的對象來說,它會看起來像這樣。Java中的碰撞處理程序的動態方法

//Inside collision class  
    public void checkCollision(Block block, Ball ball){ 
    //do stuff with the variables given 
    } 

這將意味着我只能檢查碰撞該塊+球

我的問題是:是否有可能能夠改變例如給出的對象,這樣我就可以用同樣的方法和只是解析對象爲例如地板物體和球,但有時使用塊和球。

而且有時樓層不avalible,所以我不能在塊和球剛分析,如果它希望所有三個

它會救我不得不把在

public void collision(Block block, Floor floor, Ball ball){ 
    } 

請問,如果你不明白了, 非常感謝

查爾頓桑塔納

回答

2

,如果你遇到了什麼這樣的方法:

// ... 
public void checkCollision(Collidable a, Collidable b) { 
    a.collideWith(b); 
} 

和接口

public interface Collidable { 

    SomeReturnType collideWith(Collidable coll); 
} 

在這種情況下,你可以任意碰撞與Collidable另一個處理在collideWith方法的碰撞。

這只是一個想法,它尚未明確如何你想達到這種效果。所以如果你延長你的答案,我可以進一步幫助你。

+0

同意這一點。我會寫一個帶有靜態無效CheckCollision(Collidable []對象)方法的CollisionHandler類,在那裏你可以決定如何分割對象etcetc ... – Exceptyon

0

超載方法

public void collision(Block block, Floor floor, Ball ball){ 
    //do stuff 
} 

public void collision(Floor floor, Ball ball){ 
    //do stuff 
} 

public void collision(Block block, Ball ball){ 
    //do stuff 
} 
+0

重載將導致重載方法的泛濫。他必須通過繼承或戰略模式來解決這個問題。 –

+0

好吧,這很好,我只是想,因爲如果我這樣做,我將不得不爲每個級別做一個方法......在每種方法中,我將probs約50行代碼和即時計劃有很多級別。 –

0

您可以使用收藏和仿製藥,如:

public void void checkCollision(List<? extends Collidable> objects) { 
    // test whatever you want 

} 

這樣你就可以用同樣的方法來測試2-n的物體碰撞,其中的對象必須繼承可碰撞類所以你保持它的類型安全,而不是使用List。

注意:沒有理由有標籤安卓和「純Java」用戶可能會給你更多的答案。把API設計或其他東西當作標籤是更合適的。