ゲームに追加するブロックのリストがあります (Minecraft のようなものです) シリアル化機能は動作していますが、リストに対応する各ブロックの位置を保存する方法がわかりません。
例えば、
drive = StorageDevice.EndShowSelector(result);
if (drive != null && drive.IsConnected)
{
SaveGame SaveData = new SaveGame()
{
playerpos = player.playerPosition,
lvl = Level,
exp = Exp,
munny = Money,
};
IAsyncResult r = drive.BeginOpenContainer(containerName, null, null);
//etc... etc..
stream.Close();
container.Dispose();
result.AsyncWaitHandle.Close();
}
これが保存方法です。initialize saves と呼ばれる前のメソッドを呼び出すと、スコアのような int やプレーヤーの位置のような Vector2 が保存されますが、とにかくブロックの位置を参照すると、ロード時に何も起こりません (プレーヤーの位置の更新を除く)とスコアの更新)。
これが更新ループにあった場合、次のように通常のようにオブジェクトを単純に数えることができます。
for (int b = 0; b < game.blocklist.Count; b++)
{
//etc..
}
ただし、これは更新ループではなく、何が起こっているのか混乱しています。
編集:私の問題をより明確にするために、ストレージクラスでリストをシリアル化する方法が正確にはわかりません
たとえば、これは通常、ゲーム コンストラクターでリストを設定する方法です。
public List<Builder> blocklist = new List<Builder>();
次に、次のように Builder クラスに存在するパラメーターを使用して、ブロックをブロックリストに追加できます。
if (player.Builder == true && player.LMBpressed == true && blockspawnamount >= placeblock)
{
if (build.BlockID == 1)
{
position = new Vector2((int)(cursor.cursorPos.X / 58) * 58, (int)(cursor.cursorPos.Y / 58) * 58);
blocktex1 = grass1;
block = new Builder(this, blocktex1, new Vector2(position.X, position.Y));
blocklist.Add(block);
placeblock = 200.0f;
}
}
次に、それに応じてブロックリストを更新します。今私の問題は、ブロックリストの各アイテムの位置を保存して、コマンドで再度ロードできるようにする方法がわからないことです。