2012-03-16 2 views
1

Я создаю приложение Xbox, и у меня есть эта проблема с контентом контента. Загрузка файлов .xnb не является проблемой, но я не могу найти полезные пособия по написанию через конвейер контента. Я хочу писать XML всякий раз, когда пользователь нажимает пользовательскую кнопку «Сохранить». Я искал в Интернете «сохранение игрового сателлита» и т. Д., Но до сих пор я не нашел решения для своего дела.Запись через конвейер контента в проекте Xbox game

Итак, вкратце: существует ли способ записи данных (в формате XML) через конвейер контента, если вызывается мой метод Save()?

Cheerz

ответ

0

Сохранение и загрузка во время игры XNA включает в себя ряд асинхронных вызовов методов. Вы найдете объекты, которые вам нужны, в пространстве имен Microsoft.Xna.Framework.Storage.

В частности, вам необходимо StorageDevice и StorageContainer;

private static StorageDevice mStorageDevice; 
private static StorageContainer mStorageContainer; 

Спасти:

public static void SaveGame() 
{ 
    // Call this static method to begin the process; SaveGameDevice is another method in your class 
    StorageDevice.BeginShowSelector(SaveGameDevice, null); 
} 

// this will be called by XNA sometime after your call to BeginShowSelector 
// SaveGameContainer is another method in your class 
private static void SaveGameDevice(IAsyncResult pAsyncResult) 
{  
    mStorageDevice = StorageDevice.EndShowSelector(pAsyncResult); 
    mStorageDevice.BeginOpenContainer("Save1", SaveGameContainer, null); 
} 

// this method does the actual saving 
private static void SaveGameContainer(IAsyncResult pAsyncResult) 
{ 
    mStorageContainer = mStorageDevice.EndOpenContainer(pAsyncResult); 

    if (mStorageContainer.FileExists("save.dat")) 
     mStorageContainer.DeleteFile("save.dat"); 

    // in my case, I have a BinaryWriter wrapper that I use to perform the save 
    BinaryWriter writer = new BinaryWriter(new System.IO.BinaryWriter(mStorageContainer.CreateFile("save.dat"))); 

    // I save the gamestate by passing the BinaryWriter 
    GameProgram.GameState.SaveBinary(writer); 

    // then I close the writer 
    writer.Close();  

    // clean up 
    mStorageContainer.Dispose(); 
    mStorageContainer = null; 
} 

Загрузка очень похожи:

public static void LoadGame() 
{ 
    StorageDevice.BeginShowSelector(LoadGameDevice, null); 
} 

private static void LoadGameDevice(IAsyncResult pAsyncResult) 
{ 
    mStorageDevice = StorageDevice.EndShowSelector(pAsyncResult); 
    mStorageDevice.BeginOpenContainer("Save1", LoadGameContainer, null); 
} 

private static void LoadGameContainer(IAsyncResult pAsyncResult) 
{ 
    mStorageContainer = mStorageDevice.EndOpenContainer(pAsyncResult)) 

    // this is my wrapper of BinaryReader which I use to perform the load 
    BinaryReader reader = null; 

    // the file may not exist 
    if (mStorageContainer.FileExists("save.dat")) 
    { 
     reader = new BinaryReader(new System.IO.BinaryReader(mStorageContainer.OpenFile("save.dat", FileMode.Open))); 

     // pass the BinaryReader to read the data 
     GameProgram.LoadGameState(reader); 
     reader.Close(); 
    } 

    // clean up 
    mStorageContainer.Dispose(); 
    mStorageContainer = null; 
}