1 Mayıs 2009 Cuma

XNA LOAD/SAVE GAME DATA

Bu işlem için öncelikle bir storegame sınıfı oluşturmalıyız.Zaten bu sınıf tün işlemlerimizi yapacaktır.Bize sadece değişkenleri atamak kalacak.

[Serializable]
public struct SaveGameData
{
public Mission[] missions;
public int year, month, totalInjectionCount;
public List totalPopulation;
public GamePlayer me;
public List buildings;
public ControlValues controlvalues;
public List roads;
public List carroads;
}

class StoreGame
{
       public void DoSaveGame(StorageDevice device, SaveGameData m)
{
// yüklenecek datayı oluştur
SaveGameData data = m;
        // Bir storage container oluştur
StorageContainer container =
device.OpenContainer("A Peaceful Dream");
        // Kayıt dosyasını nereye oluşturacağını gir
string filename = Path.Combine(container.Path, "savegame.xml");
        // Belirlediğin xml i aç yoksa yarat.
FileStream stream = File.Open(filename, FileMode.Create);
// veriyi xml datasına çevir
XmlSerializer sf = new XmlSerializer(typeof(SaveGameData));

        // dosyayı kapat
stream.Close();
        // containerı dispose et
container.Dispose();
}

public SaveGameData LoadGame(StorageDevice device)
{
SaveGameData ret = new SaveGameData();
StorageContainer container =
device.OpenContainer("A Peaceful Dream");
// savegamin adresini al.
string filename = Path.Combine(container.Path, "savegame.xml");
FileStream file = File.Open(
filename, FileMode.Open, FileAccess.Read);
XmlSerializer serializer = new XmlSerializer(typeof(SaveGameData));
ret = (SaveGameData)serializer.Deserialize(file);
file.Close();
return ret;
}
}
}

Storage sınıfımızı oluşturduktan sonra oyun içinde neleri kaydedeceğimizi ayarlayıp DoSaveGame dememiz yeterli.

public static void SaveGame()
{
savegamedata = new SaveGameData();
savegamedata.buildings = buildings;
savegamedata.carroads = carroads;
savegamedata.controlvalues = controlValues;
savegamedata.me = me;
savegamedata.missions = missions;
savegamedata.month = month;
savegamedata.roads = roads;
savegamedata.totalInjectionCount = totalInjectionCount;
savegamedata.totalPopulation = totalPopulation;
savegamedata.year = year;
storegame.DoSaveGame(device,savegamedata);

}
public SaveGameData LoadGame()
{
return storegame.LoadGame(device);
// buildings = savegamedata.buildings;
}

2 yorum: