2013-01-11 103 views
1

我在LWJGL中做了一個簡單的tic tac toe遊戲練習。LWJGL的組織代碼

當我編寫繪製棋盤方格和棋子的方法時,我應該將它們放在一個graphicsLib類中,然後由各種對象(如棋盤)調用它們嗎?或者認爲每個對象都包含代碼來繪製自己的元素是最佳做法?我正在尋找儘可能擴展的代碼。

具體來說,我有一個Board類,它是Square類型的對象的集合,並且方形對象被分配了一個枚舉狀態CLEAR,X或O.然後,我將運行一個switch語句來調用繪製正方形的適當方法。我應該把每個方法放在它自己的對象中還是有一個大的圖形對象(比如public class graphicsLib),然後提供繪製各種元素的方法?

組織這個的最佳方法是什麼?

+0

如果您發佈了代碼的相關示例,它將有所幫助。 –

回答

1

儘可能在可能的情況下使用面向對象的方法。當我在寫這樣的事情,我一般會擁有我的每個對象提供至少兩種方法:

public void update(int delta); 
public void render(); 

這樣,我的對象和他們所有的許多實例懂得自我更新和渲染自己。然後,您可以構建代碼,以便Board類的更新和呈現方法將在其子廣場上調用updaterender(請參見下面的示例)。這提供了一些好處:

  1. 對象的繪製/更新內聚地接近該對象的表示(分離關注點)。
  2. 隨着您的「模型」類變得複雜,您的渲染函數接近該數據,因此您的API保持穩定。如果您有一個繪圖課程,您可以想象您必須將大量數據傳遞給繪圖類,並且每個調用都必須根據您的模型更改進行自定義和更改。
  3. 您將不會有一個巨大的類提供繪製所有內容的API。這將很快變得龐大而笨拙。
  4. 你有一個Painter's Algorithm的內置結構,因爲當你根據父/子關係繪製事物時,你有一個層次結構。您只需要在每位家長的render方法中正確管理您的兄弟姐妹。

以下是層次結構呈現的示例。

public class Board { 
    List<Square> squares; 

    public render() { 
     // Render your board first 
     ... 

     // Render child squares 
     for (Square square : squares) { 
      square.render(); 
     } 
    } 
} 

所以,你可以想象,你的主要遊戲循環可以簡單地告訴你的棋盤對象渲染,你就完成了。你不需要對董事會可能需要渲染的東西有任何深入的瞭解。

+0

謝謝!我看到的代碼幾乎完全像你寫的那樣。我只是想知道最佳做法是什麼,你似乎已經證實了我的計劃。你搖滾。 – sakurashinken