我正在開發Java Android遊戲。這裏的遊戲通常需要使用內存池來避免垃圾回收。結合具有不同領域效率的子類?
爲了討論的方便,說我有以下類:
// Enemy in the game
class Enemy { int x; int y; abstract void update(); }
// Enemy that just bounces around
class Roamer extends Enemy { int direction; ... }
// Enemy that chases a player
class Chaser extends Enemy { Player target; ... }
// maybe 20 more enemy types...
利用子類是一種痛苦使用內存池的時候,因爲你需要如說你想要多少個漫遊者和追蹤者物體,而不是你可能需要多少敵人物體。此外,虛擬功能調用更新可能會很慢。
一個選擇,我認爲是所有這些類只是合併成一個如
class Enemy
{
int direction;
Player target;
int type; // i.e. ROAMER_TYPE, CHASER_TYPE
}
然後,我會有一個更新函數,檢查「類型」變量,並相應地更新。這顯然是更類似C的方法。雖然因爲例如漫遊者敵人將有一個它從未使用的「目標」變量。我一次不可能在內存中擁有超過100個敵人,儘管如此,這確實不是一個明智的記憶。我只想在漂亮的代碼和速度之間做出妥協。
有沒有人有任何意見如何最好的結構呢?合併這樣的類太過分了嗎?這是一個好主意嗎?我應該只使用普通班級樹嗎?
我知道有沒有正確的答案,但我想有些不同的觀點。
如果採用第二種方法,請務必使用枚舉而不是整數,以確保類型安全。 – 2010-02-08 01:26:09
枚舉嚴格不建議在android http://developer.android.com/guide/practices/design/performance.html#avoid_enums下。我真的不喜歡這種方法,因爲這意味着我必須輸入文件的名稱兩次(一次用引號,一次用於常量)。 – 2010-02-08 01:31:25