2011-04-05 26 views
8

所以我只是在用Java編寫遊戲的開始,我在寫我的遊戲對象。現在我在Evolve Your Hierarchy這裏讀到,你應該把你的遊戲當成作品而不是作爲一個大的階級層次結構。從以前的鏈接此圖顯示:如何在Java中編寫可靠的純聚合(組合)遊戲對象?

enter image description here

然而,在實際開始認真執行我對哪裏應用接口中的一個小問題。

比方說你有一個叫播放器和可移動的接口和渲染類。你實現這個使用公共接口變量:

class Player { 
    public Moveable moveable; 
    public Renderable renderable; 
} 

class GenericMoveable implements Moveable { 
    // Function implementations 
} 

class PlayerRenderable implements Renderable { 
    // Function implementations 
} 

還是你試圖通過直接應用接口對象做到這一點:

class Player implements Moveable, Renderable { 
    private GenericMoveable genericMoveable; 

    // Non-direct Implementation of Moveable 
    void someMoveFunc(double x, double y) { 
     genericMoveable.someMoveFunc(x, y); 
    } 

    // Direct implementation of Renderable 
    void someRenderableFunction() { 
     // Player class specific code 
    } 
} 

class GenericMoveable implements Moveable { 
    // Function implementations 
} 

現在目前我覺得第二種方法比較好。主要原因是因爲我可以創建以下列表:

List<Renderable> renderObjects; // use this to draw all of the objects to the screen 
List<Moveable> moveObjects; // use this to move all objects at once 

我真的只是想確認我是在正確的軌道上。我非常肯定,當通過Java編寫遊戲創建遊戲對象時,您希望將接口直接應用到遊戲對象中,然後在需要時使用專用接口,併爲其餘部分直接實現這些功能。它是否正確?我在做什麼的積極和消極?

雖然,而在我們這裏,還有什麼我需要看出來的成分中執行遊戲的Java對象?我應該做什麼不同?感謝您提前做出任何回覆,我非常感謝任何幫助。

+0

第二個例子似乎要好很多,因爲你可以從列表中做出Moveable和Renderable接口。但是,我有許多實現Moveable的類,我發現我複製了genericMoveable.someMoveFunc(x,y) ;在所有這些問題中 - 你遇到過這個問題嗎? – sdasdadas 2013-01-14 22:03:14

+0

@sdasdadas其實我建議採取看看這個:http://gamadu.com/artemis/ – 2013-01-15 02:24:12

回答

2

這是一個有趣的聯繫。我認爲你所想到的Player類是該文章稱之爲組件容器的東西。爲此,將接口應用到課堂聽起來像是要走的路。這是唯一的途徑,這將導致你到一個純粹的聚集結構(其中不再有在您的系統Player類本身

順便說一句,你提出的結構是基本的應用delegation design pattern一種Player依靠委託給Movement對象的所有移動操作,它並不關心有什麼樣的Movement對象的特定種類的工作。

+0

我應該真的提交更多的設計模式來記憶,以便我可以更好地解釋我的想法。 「這是將您帶入純粹聚合結構的唯一途徑」那麼這是否意味着目前結構並非純粹聚合的意義? – 2011-04-05 03:59:48

+0

不是從我瞭解的那個鏈接。他寫道:「......每個遊戲實體都是由一系列組件組成的,沒有任何」遊戲實體對象「。」我認爲他的意思是:純粹的聚合體繫結構中根本沒有「Player」類。這是一個相當極端的重構,我從他寫的那段旅程中得到了印象,那裏的旅程對他來說並不完全沒有痛苦。走中路(就像你在做)似乎對我來說更合理。 – 2011-04-05 04:04:34

4

我創建了使用Java的幾場比賽,也看到了源到一些非常優秀的遊戲,似乎這樣做的最常見的方式是第二種方法。從我所知道的來看,使用第二種方法的最佳理由是因爲使用列表跟蹤對象變得更加容易,並且允許使用較少的線條進行繪製。看起來你在正確的軌道上,Evolve Your Hierarchy這篇文章對於新遊戲開發者來說是一本很棒的讀物。

+2

那麼,如果你在野外,然後,讓我更有信心,這個路徑至少工作不夠好,別人看到了使用。 – 2011-04-05 04:00:23