1

WP7 Silverlightでゲームの状態を保存するための最良の方法は何ですか?私はそれをテキストファイルに保存することを好みます。アプリケーションがバックグラウンドに移行したとき(たとえば、誰かが呼び出しているとき、ユーザーが「戻る」をクリックしたときなど)、または閉じたときにゲームを保存したい。これどうやってするの?

4

1 に答える 1

6

update、このコードは次の記事からのものです。

バックグラウンド タスク、トースト、およびタイル用の シンプルな WP7 Mango アプリ バックグラウンド タスク、トースト、およびタイル用のシンプルな WP7 Mango アプリ: コードの説明

IsolatedStorage はうまく機能します。

これは、IsolatedStorage でインスタンスを json (または xml) にシリアル化および逆シリアル化するために使用するクラスです。この例ではServiceStack.Textを使用していますが、切り替えることができます。

使用するには、読み書きします。

public class MyClass {
    public void Save() {
        MutexedIsoStorageFile.Write(this, "MyClass.json", "MYCLASSJSON");
    }

    public static MyClass Load() {
        return MutexedIsoStorageFile.Read<MyClass>("MyClass.json", "MYCLASSJSON");
    }
}        

public static class MutexedIsoStorageFile
    {
        public static T Read<T>(string fileName, string mutexName) where T : new()
        {
            var mutexFile = new Mutex(false, mutexName);
            var model = new T();
            mutexFile.WaitOne();

            try
            {
                using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                using (var stream = new IsolatedStorageFileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read, store))
                using (var reader = new StreamReader(stream))
                    if (!reader.EndOfStream)
                    {
                        //var serializer = new XmlSerializer(typeof (T));
                        //model = (T) serializer.Deserialize(reader);                       
                        model = JsonSerializer.DeserializeFromReader<T>(reader);
                    }
            }
            finally
            {
                mutexFile.ReleaseMutex();
            }

            return model;
        }

        public static void Write<T>(T data, string fileName, string mutexName)
        {
            var mutexFile = new Mutex(false, mutexName);
            mutexFile.WaitOne();

            try
            {
                using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                using (var stream = new IsolatedStorageFileStream(fileName, FileMode.Create, FileAccess.Write, store))
                {
                    //var serializer = new XmlSerializer(typeof (T));
                    //serializer.Serialize(stream, data);
                    JsonSerializer.SerializeToStream(data, stream);
                }
            }
            finally
            {
                mutexFile.ReleaseMutex();
            }
        }
于 2013-01-17T15:50:20.263 に答える