2012-03-10 70 views
5

我正在Groovy中開發一個遊戲,我正在考慮廣泛地使用閉包來使架構更清潔。例如,爲了實施狀態效果(例如中毒),對象將具有執行每個遊戲回合的閉包列表。這些在保存遊戲時必須被序列化。Groovy中的閉包序列化

將閉包存儲在需要序列化的對象中通常是個好主意嗎?或者我應該選擇更傳統的架構(例如,存儲一個StatusEffect對象的列表)?

回答

4

有倒閉執行每個遊戲回合的清單聽起來像一個非常好的主意:-)

連載閉包是完全可能的。由於Groovy的1.8.5,已取得容易,因爲這兩種方法dehydraterehydrate加入到閉包(這樣ownerthisObjectdelegate可序列化之前被剝離)

但我有本地Java序列化的問題數據的保存。要發送系統間短暫的數據,它可以很好(但即使如此,我會看看protocol buffersthrift

考慮如果您需要更新您的遊戲會發生什麼?如果poisoned影響中存在一個錯誤,那麼每個使用漏洞中毒關閉保存文件的用戶都會保留該錯誤,直到其消失。在多人遊戲中,人們也有可能操縱他們的保存遊戲文件來給自己以意想不到的或不需要的權力(因爲權力本身的功能將被存儲在文件中)。我可以看到操縱毒藥的影響,所以它增加了惠普而不是刪除它們可能是有益的;-)

總之,我想我要說的是我會寫出一個字符表,正在影響用戶,庫存,評分等,然後在文件讀入時檢查並應用關閉。

+0

謝謝。我使用Java反編譯器來弄清楚Groovy如何在內部實現閉包,現在看到序列化它們沒有任何問題。它們只是使用doCall方法自動生成的類,並存儲了對閉包中使用的所有外部變量的引用。唯一的問題是,即使它沒有被使用,它們總是帶有「this」的引用,但是正如你所說的那樣,自1.8.5以來有一個可用的工作 – ramirami 2012-03-12 14:21:44