C# 如何序列化XNA中的对象列表?
我有一个要添加到游戏中的积木列表(有点像minecraft),我有一个可以工作的序列化函数,但是我不知道如何保存与列表对应的每个积木位置 比如说,C# 如何序列化XNA中的对象列表?,c#,xna-4.0,C#,Xna 4.0,我有一个要添加到游戏中的积木列表(有点像minecraft),我有一个可以工作的序列化函数,但是我不知道如何保存与列表对应的每个积木位置 比如说, drive = StorageDevice.EndShowSelector(result); if (drive != null && drive.IsConnected) { SaveGame SaveData = new SaveGame()
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();
}
这就是它的保存方式,当我调用前面名为initiate saves的方法时,它会保存积分(如分数)和向量(如球员位置),但是,无论如何,重新传递到块位置不会导致加载时发生任何事情(除了球员位置更新和分数更新)
如果这是在更新循环中,我可以简单地像普通一样计算对象:
for (int b = 0; b < game.blocklist.Count; b++)
{
//etc..
}
然后相应地更新区块列表。现在我的问题是,我不知道如何保存每个区块列表项的位置,以便在收到命令后可以再次加载它们。我很惊讶这一点从未得到回答,但我理解正确吗?你问的是如何序列化块的列表(或数组) 我的回答假设您的整个类是可序列化的: 如果要将每个实体(如块)存储在列表中,则可以使用XMLArray()属性:
using System.Xml;
using System.Xml.Serialization;
using System.IO;
[Serializable()]
public class MyClass
{
private list<blocks> m_Blocks = new List<block>();
[XMLArray("Items")]
public list<block> Blocks{
get{ return m_blocks; }
set{ m_Blocks = value; }
};
// ... other members
}
使用System.Xml;
使用System.Xml.Serialization;
使用System.IO;
[可序列化()]
公共类MyClass
{
私有列表m_块=新列表();
[XMLArray(“项”)]
公共列表块{
获取{返回m_块;}
设置{m_Blocks=value;}
};
//……其他成员
}
。。。只要对象中的所有字段都是可序列化的对象或值类型,就可以使用
之后,您可以使用与任何非XNA应用程序相同的方式对其进行序列化。我真的不理解这个问题。您没有访问阻止列表的权限吗?你可以先序列化列表,然后再取消序列化。我不知道如何序列化它,这就是问题所在,我需要保存每个块的位置,但一切都不起作用
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;
}
}
using System.Xml;
using System.Xml.Serialization;
using System.IO;
[Serializable()]
public class MyClass
{
private list<blocks> m_Blocks = new List<block>();
[XMLArray("Items")]
public list<block> Blocks{
get{ return m_blocks; }
set{ m_Blocks = value; }
};
// ... other members
}