2013-04-29 108 views
1

我已經寫了一個在java中的2D平臺遊戲,我想知道我將如何保存遊戲。我只看着使用XMLEncoder或ObjectOutputStream對整個遊戲進行序列化,然而那些並沒有正確保存線程。當我再次開始遊戲時,線程沒有運行。所以然後我試着在遊戲加載之後調用所有線程的開始,但是這造成了線程處於無效狀態的主要問題,並且遊戲開始出現問題。將整個遊戲寫入保存文件的最佳方式是什麼?保存多線程遊戲

+0

是否可以保存線程的狀態,然後創建一個新線程,將其狀態設置爲您保存的內容並啓動它?硬是給一個好建議,沒有一點代碼,甚至暗示什麼問題 – 2013-04-29 11:00:09

+0

好吧,這是很難發佈的代碼,因爲它是1000行,但如果我創建一個新的線程它不會在如果我然後創建一個新的線程,它的執行的相同部分。 – 2013-04-29 11:02:56

+0

你可以使用線程組或跟蹤並保存不同線程之間的所有依賴關係嗎? – 2013-04-29 11:05:07

回答

3

保存遊戲很少像保存退出/保存時的內存中的所有對象一樣簡單,然後將它們加載回其確切狀態。

您很可能需要/希望創建一個數據結構來表示您將要寫入磁盤的遊戲狀態。多線程不太可能成爲您的首要關注點。當您加載遊戲狀態時,您將希望重新啓動這些線程。

考慮到許多遊戲通過菜單保存/加載。如果您的遊戲始於啓動畫面或至少一個主菜單,則無論如何您都不希望在啓動時從其確切狀態加載對象。找到您需要需要的最基本的重要元素,以重建關於遊戲狀態的所有重要信息並將其保存到磁盤。遊戲的大部分狀態都可以通過非常少量的數據隱式重新創建。

不幸的是,您應該如何保存/加載遊戲的確切方法在Q/A網站上不容易回答,因爲它將在很大程度上取決於您使用的確切數據結構和遊戲的整個性質。

+0

謝謝你這樣做 – 2013-04-29 11:05:17

+0

對不起,我沒有更多的幫助;真的不是一個簡短的適合你的問題的解決方案。 – BlackVegetable 2013-04-29 11:07:12

2

您應該只序列化您的業務域數據,而不是線程。線程需要在重新加載數據時再次創建。假設你的域類是可序列化的,ObjectOutputStream是可以的。