2009-12-30 48 views
3

我正在製作像遊戲一樣的模擬遊戲,現在我正在試圖弄清楚我將如何構建我的對象。如何正確地創建遊戲對象

現在我想創建一個名爲遊戲物體類的僞低於

public class GameObject { 
     name:String 
     width:int 
     height:int 
} 

這樣我就可以創建灌木,樹木和建築物的對象。但後來我開始思考。如果我想創建多個相同類型的建築物和樹木,該怎麼辦?我將不得不繼續製作GameObject的實例並給它一個新的名稱,高度和寬度。這些屬性必須是相同的值才能複製一個對象。這似乎有點乏味。然後我想,也許這不是正確的路。所以我在想,我將不得不延長遊戲物體像下面

public class Tree extends GameObject{ 
     birdHouse:Boolean 
} 

public class Building extends GameObject{ 
     packingGarage:Boolean 
     stories:Number 
} 

public class House extends GameObject{ 
     garage:Boolean 
     stories:Number 
} 

現在這樣,我就可以創建房子,還是樹的多個實例,而不產生指定它確實是一個房子或樹的性質。這看起來更合乎邏輯,但同時它似乎分配更多的內存,因爲我正在創建更多的類。

我只需要知道處理像這樣的對象的最佳實踐。如果有人能幫我解決這個問題。同樣,如果你知道任何資源來減少遊戲或任何應用程序的負載的最佳做法。我也想使用接口。第二個概念似乎更合理,我在想,我父執行類似下面

public class GameObject implement IGameObject { 
      name:String 
      width:int 
      height:int 
    } 

現在這樣,我可以創建具有鬆散接受的方法的類可以接受任何類型的遊戲對象繼承一個接口。

Selector.loadObject(gObject:IGameObject); 

取決於它是什麼類型(即樹,建築物,房子),我可以使用一個case語句來找出哪些類型,它和相應的評估。

我也創建了一個Tile Class,它將通過loadObject方法。它也將是GameOject類的一個孩子。如果case語句發現它是Tile類型,它會根據鼠標結束的情況高亮顯示任何Tile。

我的第二個問題是,如果一個類繼承了一個實現接口的類,那麼該類的子類也被認爲是一個IGameObject。還是必須直接實現該接口?

所有這些聽起來像是我正朝着正確的方向前進,就組織而言。

感謝您的幫助,謝謝你們!

回答

1

這似乎更符合邏輯,但在 同時似乎是因爲我創造了更多 類是分配更多的內存 。

創建新類不會佔用大量內存。它創建一個使用內存情況 - 但是,相比於圖形等所使用的負載不要擔心內存的內存量可以忽略不計。您現階段唯一關心的問題應該是良好的代碼組織。

當他們有不同的行爲時,你應該有單獨的類。如果它們具有相同的行爲但屬性不同,則使用相同的類並相應地設置屬性。

在這種情況下,不會出現有顯著不同的行爲,但如果它分離成樹,大廈和大廈讓生活更容易爲你管理時,哪些項目可以包含在別人等,做到這一點。

2

你應該看看Flyweight模式

維基百科:

飛錘是一個軟件設計 模式。輕量級是 通過共享盡可能減少內存使用 儘可能多的數據與其他 類似的對象;當簡單的 重複表示將使用不可接受的內存量時,它是一種大量使用 對象的方法。

至於你的第二個問題,答案是肯定的。一個類的所有子類可以說是實現了父類實現的所有接口。

3

你可以考慮的一件事是使用對象的組合來繼承繼承。這種伴隨着Flyweight的答案。而不是讓所有的GameObjects繼承GameObject的屬性;相反,每個遊戲對象都只有一個引用或指向具有所需屬性的對象或接口的指針。例如,所有的遊戲對象都可能具有某種「大小」屬性 - 而不是從基類繼承,只是讓每個遊戲對象引用或指向「大小」類,以便可以共享大小對象在類似的對象之中