我有一个要添加到游戏中的块列表(有点像我的世界)我有一个有效的序列化功能,但我对如何保存与列表对应的每个块位置感到困惑。
例如,
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();
}
这就是它的保存方式,当我调用一个名为initial saves的前一个方法时,它会保存诸如分数之类的整数和诸如玩家位置之类的Vector2,但是,无论如何参考块位置会导致加载时没有任何事情发生(除了玩家位置更新和分数更新)。
如果这是在更新循环中,我可以像平常一样简单地计算对象:
for (int b = 0; b < game.blocklist.Count; b++)
{
//etc..
}
但是,这不在更新循环中,我对发生的事情感到困惑。
编辑:为了让我的问题更清楚,我不知道如何在我的存储类中序列化列表
例如,这就是我通常在我的 Games Contsructor 中设置列表的方式:
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;
}
}
然后相应地更新阻止列表。现在我的问题是,我不知道如何保存每个阻止列表项目的位置,以便可以根据命令再次加载它们。