XNA游戏开发之(六)——保存游戏数据
生活随笔
收集整理的這篇文章主要介紹了
XNA游戏开发之(六)——保存游戏数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[原創]Alex
游戲過程中,通常需要存儲游戲狀態。在下次啟動游戲時,重新載入游戲,繼續游戲。
實現過程非常簡單,首先建立一個結構體定義需要保存的游戲參數,然后通過XmlSerializer類將其保存為一個XML文檔。
????
?
1?interface?GameData2?{
3????int?GameID;
4????string?PlayName;
5????DateTime?Time;
6?}
?
XNA游戲可運行在XBOX和PC,做到兩者的兼容,需要使用StorageDevice將數據保存到磁盤。
首先 一步創建一個StorageDevice,這個過程需要打開Guide并終止程序,直到用戶關閉Guide。使用Guide必須在Game類的構造函數中進行注冊。
?
1?public?AlexGame()2?{
3?????graphics?=?new?GraphicsDeviceManager(this);?
4?????Content.RootDirectory?=?"Content";?
5?????Components.Add(new?GamerServicesComponent(this));?
6?}?
?
?
第二步 在Update方法中捕獲事件。
?
代碼 ?1?//獲取鍵盤狀態?2?KeyboardState?keyState?=?Keyboard.GetState();?
?3?//Guide不顯示
?4?if?(!Guide.IsVisible)
?5?{
?6?????//鍵盤按下S
?7?????if?(keyState.IsKeyDown(Keys.S))?
?8?????????Guide.BeginShowStorageDeviceSelector(FindStorageDevice,?"saveRequest");?
?9????//鍵盤按下L
10?????if?(keyState.IsKeyDown(Keys.L))?
11?????????Guide.BeginShowStorageDeviceSelector(FindStorageDevice,?"loadRequest");?
12?}?
?
第三步,定義FindStorageDevice方法
?
代碼 ?1?private?void?FindStorageDevice(IAsyncResult?result)?2?{
?3?????StorageDevice?storageDevice?=?Guide.EndShowStorageDeviceSelector(result);?
?4?????if?(storageDevice?!=?null)
?5?????{
?6?????????if?(result.AsyncState.ToString()?==?"saveRequest")
?7?????????{
?8?????????????//保存游戲?
?9?????????????SaveGame(storageDevice);
10?????????}?
11?????????else?if?(result.AsyncState.ToString()?==?"loadRequest")
12?????????{
13????????????//加載游戲
14?????????????LoadGame(storageDevice);?
15?????????}????
16?????}
17?}?
?
第四步,定義SaveGame,LoadGame方法:
?
代碼 1?private?void?SaveGame(StorageDevice?storageDevice)?2?{
3?????StorageContainer?container?=?storageDevice.OpenContainer("AlexGame");?
4?????string?fileName?=?Path.Combine(container.Path,?"save0001.sav");?
5?????FileStream?saveFile?=?File.Open(fileName,?FileMode.Create);?
6?????XmlSerializer?xmlSerializer?=?new?XmlSerializer(typeof(GameData));?
7?????XmlSerializer.Serialize(saveFile,?gameData);?
8?????saveFile.Close();?
9?}?
?
?
代碼 private?void?LoadGame(StorageDevice?storageDevice)?{
????StorageContainer?container?=?storageDevice.OpenContainer("AlexGame");?
????string?fileName?=?Path.Combine(container.Path,?"save0001.sav");?
????if?(File.Exists(fileName))?
????{
????????FileStream?saveFile?=?File.Open(fileName,?FileMode.Open);?
????????XmlSerializer?xmlSerializer?=?new?XmlSerializer(typeof(GameData));?
????????gameData?=?(GameData)xmlSerializer.Deserialize(saveFile);?
????????saveFile.Close();?
????}
}?
?運行游戲后按下鍵盤S鍵會在“文檔”建立相應的游戲保存文件夾 如AlexGame
轉載于:https://www.cnblogs.com/AlexCheng/archive/2010/05/04/2120349.html
總結
以上是生活随笔為你收集整理的XNA游戏开发之(六)——保存游戏数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (转)jQuery插件:Image la
- 下一篇: HTTP状态码(HTTP Status