2012-09-03 38 views
1

我在保存到二進制文件時遇到了一些問題。保存XNA類列表

我需要將我的遊戲信息保存到二進制文件並在遊戲加載時加載它。我試圖讓所有將要保存的信息上課,然後保存。

它看起來像這樣:

public struct SaveGameData 
{ 
    public List<Chunk> chunkList; 
    public string saveName; 
    public string playerName; 
    public Vector2 playerPosition; 
} 

的問題是大塊的列表...它不序列和,因爲它包含XNA類的引用的類不能序列化。

我保存數據的功能如下:

public static void saveGame(string mSaveFileName, SaveGameData data) 
    { 
     saveFileName = mSaveFileName; 

     if (!Directory.Exists(saveFilePath)) 
     { 
      Directory.CreateDirectory(saveFilePath); 
     } 

     FileStream stream = File.Open(saveFilePath + saveFileName + ".dat", FileMode.OpenOrCreate, FileAccess.Write); 

     data.saveName = saveFileName; 
     formatter.Serialize(stream, data); 
     stream.Close(); 
    } 

如何類的實例保存到文件,然後再念嗎?

+0

好吧,它不是那麼簡單,只要調用序列化,一切都完成了。你必須正確決定並讓你的課程可序列化。請參閱[this](http://msdn.microsoft.com/zh-cn/library/ms233843.aspx)以獲取更多信息。一個最後的建議,只是序列化非常簡單的數據。如果你想序列化像Texture這樣的複雜類,這是行不通的。如果你的XNA類是Vectors和Matrix,你應該沒問題。 – dowhilefor

+4

你可以給'Chunk'定義嗎? – Seb

回答

0

保存數據時沒有問題。

XNA您可以輕鬆地將用戶或遊戲細節的數據保存在文件中。但是可能會出現序列化問題。這是我用過的不同選項。你可以選擇任何一個。

另存爲XML:如果您的類是可序列化的(具有serialize屬性的類),您可以將類序列化爲XML並將其自己寫入磁盤。使用純C#有很多方法。它是MSDN它。您可以選擇其中的任何

另存爲JSON:,如果你的類是可序列化的,那麼你可以爲使用JSON作爲FILESTREAM JSON是純字符串保存在磁盤上,你可以爲流寫入數據。

另存爲文本:我個人從來不喜歡這個,因爲這文件不具有任何結構和回讀難以

另存爲二進制:當你正試圖在這裏。將數據轉換爲添加爲二進制對象。最大的缺點就是你可以讀取數據。它比選擇速度快,但在遊戲中,實際上需要執行IO操作的時間非常少。所以,我個人比較喜歡上面的選項。

請讓我知道是否需要更多的細節。