我大約有20%進入我的第一場比賽,並想知道存儲本地數據的最佳方式是什麼。我需要以數據庫類型的方式存儲物品屬性,例如等級,每等級的傷害等。將這些數據存儲在「本地」數據庫中,然後使用SQL進行查詢被認爲是很好的做法嗎?還是有另一種方式?我正在使用.NET 4和XNA 4遊戲數據存儲
謝謝!
我大約有20%進入我的第一場比賽,並想知道存儲本地數據的最佳方式是什麼。我需要以數據庫類型的方式存儲物品屬性,例如等級,每等級的傷害等。將這些數據存儲在「本地」數據庫中,然後使用SQL進行查詢被認爲是很好的做法嗎?還是有另一種方式?我正在使用.NET 4和XNA 4遊戲數據存儲
謝謝!
我不認爲有一個通用的規則,這是很多事情中的一個,只是取決於你在做什麼以及你將如何使用你的數據。
存儲數據的方法很多。我通常會看到二進制文件格式在遊戲中最常見。但是,如果你想在不使用實際的數據庫服務器的情況下使用SQL,那麼我建議你查看嵌入的數據庫,如SQLite,SQL Server Compact Edition或Firebird(還有其他的)。這些將數據存儲在單個文件中,但可以使用SQL查詢它們。
但是用戶可以編輯嵌入式數據庫嗎?這是我最大的恐懼。我不介意用戶是否通過黑客入侵作弊(畢竟這將是單人遊戲),但我不希望它像打開數據庫文件一樣簡單。 – TheGateKeeper 2013-03-05 12:58:25
你可以用密碼保護它。過去我已經使用SQL Compact和Firebird完成了這項工作。 – Gigi 2013-03-05 14:28:13
我決定使用SQLLite,我們將看看它是如何發展的。感謝幫助的人! – TheGateKeeper 2013-03-05 14:59:57
標準方法實際上是使用內置的XNA支持Title和User文件存儲。請參閱this overview瞭解MSFT XNA存儲最佳實踐。
雖然是一個很好的提示,但用戶存儲只能解決數據存儲位置的問題,而不是如何管理它。 – millimoose 2013-03-04 21:18:24
序列化。如果您想要可讀文件,請選擇XML/JSON序列化程序。如果您需要性能:protobuf或手動二進制序列化。
序列化對於批量寫出來的savegames來說可能更好,這可能不是OP正在嘗試做的事情。 (看到他提到的一些統計數據可能需要在整個遊戲過程中不斷更新。) – millimoose 2013-03-04 21:20:24
[GameDev上的這個問題](http://gamedev.stackexchange.com/questions/7952/how-to-choose-how-to-store-data)是類似的,也許你會覺得它很有用(唯一的不同之處在於它沒有專注於具體的框架) – 2013-03-04 20:47:26
除非您有非常非常特定的性能需求,並且需要通過任意屬性查詢數據,否則使用嵌入式數據庫和SQL或EF是一種很好的通用方法。 (假設XNA會讓你得到一個普通的舊文件句柄。) – millimoose 2013-03-04 21:19:50