1

バイナリ ファイルへの保存に問題があります。

ゲーム情報をバイナリ ファイルに保存し、ゲームのロード時にロードする必要があります。保存されるすべての情報を含むクラスを作成してから保存しようとしました。

次のようになります。

public struct SaveGameData
{
    public List<Chunk> chunkList;
    public string saveName;
    public string playerName;
    public Vector2 playerPosition;
}

問題はチャンクのリストです...それはシリアライズされず、クラスはXNAクラスへの参照が含まれているためシリアライズできません。

データを保存するための私の関数は次のようになります。

public static void saveGame(string mSaveFileName, SaveGameData data)
    {
        saveFileName = mSaveFileName;

        if (!Directory.Exists(saveFilePath))
        {
            Directory.CreateDirectory(saveFilePath);
        }

        FileStream stream = File.Open(saveFilePath + saveFileName + ".dat", FileMode.OpenOrCreate, FileAccess.Write);

        data.saveName = saveFileName;
        formatter.Serialize(stream, data);
        stream.Close();
    }

クラスのインスタンスをファイルに保存して、後で読み取るにはどうすればよいですか?

4

1 に答える 1

0

データ保存時は問題ありません。

XNA を使用すると、ユーザーまたはゲームの詳細のデータをファイルに簡単に保存できます。しかし、ものをシリアル化すると問題が発生する可能性があります。これが私が使用した別のオプションです。どれでも選べます。

XML として保存:クラスがシリアライズ可能 (serialize 属性を持つクラス) の場合、クラスを XML にシリアライズし、それ自体をディスクに書き込むことができます。純粋な C# を使用してそれを行う方法はたくさんあります。これがそのMSDNです。それらのいずれかを選択できます

JSON として保存:クラスがシリアライズ可能な場合、JSON は純粋な文字列であるため、filestream を使用してディスクに JSON として保存でき、データをストリームとして書き込むことができます。

テキストとして保存:このファイルには構造がなく、読み返すのが難しいため、個人的には好みません。

バイナリとして保存: ここで試しているように。バイナリオブジェクトとして追加するようにデータを変換します。これの最大の欠点は、データを読み取ることさえできることです。オプションよりも高速ですが、ゲームでは、実際に IO 操作を行う必要がある瞬間が非常に少なくなります。したがって、私は個人的に上記のオプションを好みます。

さらに詳細が必要な場合はお知らせください。

于 2013-08-09T08:41:18.793 に答える