我正在用Java編寫Android遊戲,我需要一種可靠的方式來快速保存和加載應用程序狀態。這個問題似乎適用於大多數面向對象的語言。健壯的方式來保存/加載依賴關係的對象?
瞭解我需要保存的內容:我使用策略模式來控制我的遊戲實體。這個想法是我有一個非常普遍的實體類,例如商店子彈/播放/敵人的位置,我再附上一個行爲類,告訴實體如何行動:
class Entiy { float x; float y; Behavior b; }
abstract class Behavior { void update(Entity e); {}
// Move about at a constant speed
class MoveBehavior extends Behavior { float speed; void update ... }
// Chase after another entity
class ChaseBehavior extends Behavior { Entity target; void update ... }
// Perform two behaviours in sequence
class CombineBehavior extends Behavior { Behaviour a, b; void update ... }
從本質上講,實體對象是容易保存,但行爲的對象可以有一個半複雜的圖形其他實體對象和其他行爲對象之間的依賴關係。我也有行爲對象在實體之間共享的情況。我願意改變我的設計,以使保存/加載狀態更容易,但上述設計對構建遊戲非常有效。
無論如何,我已經考慮的選項有:
使用Java序列化。這在Android中意味着非常慢(我會在某個時候進行分析)。但是,當版本發生變化時,我擔心健壯性。
使用類似JSON或XML的東西。我不知道如何處理存儲對象之間的依賴關係。我是否必須爲每個對象提供一個唯一的ID,然後在加載時使用這些ID來將正確的對象鏈接在一起?我想我可以例如更改ChaseBehaviour以將ID存儲到實體,而不是參考,這將用於在執行行爲之前查找實體。
我寧願避免編寫大量加載/保存代碼,我自己,因爲我覺得它很容易犯錯誤(例如忘記保存的東西,讀出的東西在錯誤的順序)。
任何人都可以給我關於良好格式的任何提示,以節省或設計,使保存狀態更容易嗎?
如果你選擇Java序列化,你可以手動定義一個私有靜態最終的long serialVersionUID以增加健壯性。否則,你會得到一個新的版本,爲每一個小的變化和編譯 – dparnas 2010-03-11 16:46:07