簡體   English   中英

不同類之間的Java碰撞檢測

[英]Java Collision detection between different classes

我正在制作一個有關射擊敵人並避開障礙物的簡單游戲,但是我對檢測碰撞有問題,因為每種游戲對象(玩家,敵人,障礙物,掉落,子彈等)都有很多類。 。

class Player { Vector3 pos; ... }
class Enemy { Vector3 pos; ... }
class Obstacle { Vector3 pos; ... }
...

boolean doCollide (Object a, Object b)
{

    if ( a.pos.x + a.size.w >= b.pos.x ) { ... }

    ...
}

而且它不會工作,因為a沒有“ pos”等,那么我該怎么做才能在每個班級都起作用? 我已經閱讀了有關接口的信息,但我真的不知道它如何對我有所幫助。

好吧,如果您願意,可以執行以下操作來獲取對象的pos.x

((Player)a).pos.x

但是,盡管這可能滿足您的需求,但我還是建議您建立一個界面,例如

public interface GameObject{
    public Vector3 getPosition();
}

並實現所有“游戲對象”,然后執行

boolean doCollide (GameObject a, GameObject b)

不僅第一種方法是錯誤的做法,而且會使編譯時的調試困難,這通常是一個不好的信號。

您可以將Object類型轉換為自己的類型,但是考慮到有多個自定義對象類型,嘗試采用這種方法效率高,因此可以使用接口。

接口聲明:

public interface IsomeName{
      public Vector3 getPosition();
}

您的課程:

class Player implements IsomeName{ @Override public Vector3 getPosition(){...}};
class Enemy implements IsomeName{ @Override public Vector3 getPosition(){...}}
class Obstacle implements IsomeName{ @Override public Vector3 getPosition(){...}}

那么您的doCollide將變為:

boolean doCollide (IsomeName a, IsomeName b)
{      
    ...
    ...
    ...
}

另一個選擇是使用抽象的getPosition()方法創建抽象的基類,並讓每個類型提供其自己的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM