[英]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.