2012-12-24 23 views
0

我正在嘗試自定義碰撞器類,您可以在其中將兩個對象傳遞給方法,並且如果兩者中的任何一個發生碰撞,請執行某種操作。對象而不是實例的碰撞測試

例如,我想提出一個射擊遊戲,和我想要做的是說:

  • 如果任何Ship碰撞與任何子彈Bullet
    • 毀壞兩個受影響Ship和影響Bullet
  • 否則
    • 什麼都不做

我想要做的就是一次寫這個,而不是每顆子彈和/或船舶。所以,我想這樣做是這樣的:

ColliderEvent collide = new ColliderEvent(); 
collide.hit(Ship, Bullet, new Runnable(){ 
    @Override 
    public void run(){ 
     // Destroy bullet and ship here 
    } 
}); 

然後在我的主要遊戲線程,我會做一些事情,將測試如果某種hit方法進行了規定,兩個物體碰撞在某些時候,和如果是的話執行第三個參數傳遞到hit

所以,有沒有辦法做到這一點,而不通過船舶/項目符號的實例hit方法?

+0

假設一艘船比一顆子彈大,你可以創建一個「位置」對象,讓一艘船返回一個「Set 」方法並檢查一個子彈的位置是否包含在船的位置集中?這當然意味着'Position'正確地實現了'equals()'和'hashCode()'... – fge

+0

我同意..如果你想,你可以爲所有對象創建一個onCollision()函數並實現它在一個超類。 – Joel

+0

我覺得你只是想爲每個船舶/子彈組合執行這種方法。兩個嵌套循環將完成此操作。 –

回答

1

我會嘗試使用events and listeners來處理庫中的這種情況。基本上,你會有一個類來檢查整個地圖是否有碰撞。如果發生碰撞,它會在對象類(子彈或船)中調用一個方法(您實現),告訴他們它們發生了碰撞。