目前正试图在unity项目中实现一个保存和加载系统,以便能够保存和重新加载游戏状态。该项目类似于桌面纸牌游戏,其中有纸牌和一叠纸牌。卡片堆栈包含KeyValuePairs的LinkedList,每个节点都包含一张卡片及其在堆栈中的方向(true=向上,false=向下(。这看起来像这样:
LinkedList<KeyValuePairs<Cards,bool>> cardsList
我们已经使用序列化代理正确地保存了项目中对象的位置、旋转和类型,但其中的卡列表没有保存。我们将如何为此类LinkedList创建一个序列化代理,作为保存和加载所需的代理?我们已经尝试以不同的方式来实现这一点,但到目前为止运气不佳,任何帮助都将不胜感激。
编辑:很抱歉忘记提及,我们使用的是二进制格式化程序,而不是XML
感谢您的回复,我们通过创建一个自定义链表序列化代理来解决这个问题,该代理在链表中迭代,并根据列表中的位置使用唯一引用将每个节点保存到文件中。当从文件加载数据时,我们可以使用相同的唯一引用以正确的顺序检索正确的节点。以下是我们如何做到这一点的代码片段(我们意识到这可能不是最有效的方法,但它符合我们的需求(:
将数据保存到文件:
`int num = 0;
info.AddValue("count", cardsList.Count);
foreach (KeyValuePair<Cards,bool> el in cardsList){
info.AddValue(num + "id", el.Key.ID);
info.AddValue(num + "faceUp", el.Value);
num++;
}`
从文件加载数据:
`int count = (int)info.GetValue("count", typeof(int));
string id = "";
bool faceUp;
for (int i = 0; i < count; i++)
{
id = (string)info.GetValue(i + "id", typeof(string));
faceUp = (bool)info.GetValue(i + "faceUp", typeof(bool));
linkedList.AddLast(new KeyValuePair<Cards,bool>(gameController.FindCard(id), faceUp));
}`