2016-01-07 56 views
0

我不知道如何通過它們在libgdx中的Y座標順序渲染多個對象。多類對象渲染順序

我有3個類,每個NPC一個。有一個人類,一個獸人類和一個玩家類。

爲了重現深度,我按照Y從高到低的順序排列了我的人類列表,這樣當它們呈現時我就可以對模擬深度進行排序。 (這是一個2D遊戲)。使用比較器可以很好地工作。

我還爲我的Orc列表使用了另一個比較器,以便它們也可以按Y順序呈現。

然而,我的問題是,當人類和獸人重疊,他們顯然打破了深度,因爲這兩個列表是獨立排序的。

可以以某種方式組合這兩個列表並將它們排序爲一個以便按順序渲染所有NPC類型?

我無法弄清楚,因爲比較器只允許使用1個類。

回答

1

您可以創建一個共享的超類或所有類實現的接口。 超類或接口需要有一個方法來檢索Y座標。

你說,每個類是一個NPC,所以你可以做一個超稱爲NPC

public abstract class NPC { 
    public abstract int getY(); 
} 

public class Human extends NPC { /* ... has a getY() method */ } 

public class Orc extends NPC { /* ... has a getY() method */ } 

然後你就可以實現Comparator<NPC>一類是基於其getY()比較NPC的。

+0

非常感謝Erwin!我確實有一個所有NPC都來自的超類。必須做很多重構,因爲我格式化了所有東西,但是你的方法完美無缺! –

+0

這是一個很好的答案,但我認爲在遊戲實體設計中,繼承的構成應該受到青睞。 – Sneh