0

在过去的几周里,我一直在 XNA 中创建游戏。在这个过程中,我在没有完全理解问题的情况下,试图在遇到问题之前解决它。

那个问题是我将如何处理保存和检索“蓝图”对象。由于我正在制作内容创建者(游戏是基于内容的),因此我需要此功能。所以目标是,我创建内容(粗略的例子,一个具有 100 生命值的“地精”类型的敌人和一个地精精灵),将其保存到序列化对象中,将其加载到游戏中,然后它可以在游戏中使用和复制-游戏。

现在很明显,当对象具有诸如 Texture2D(精灵)之类的不可序列化的东西时,您无法对它们进行序列化。我通过将所有纹理添加到静态类并仅存储对象中纹理的索引(例如,不包含 Texture2D 属性, Goblin 将包含一个链接到适当纹理的索引 - 稍微过于简单,但你明白了)。

但随后病毒传播开来,我开始为我的所有对象引用这样做。例如,地精也需要对 AI 对象的引用。该 AI 对象只有方法,因此显然是可序列化的,但我将它存储在与纹理相同的静态类中,并通过 index.html 链接到它。现在回想起来,我不禁为自己的想法而战栗。

所以我的问题是,除了纹理之外的所有内容都应该通过直接引用存储在可序列化类中,而不是通过索引引用吗?或者有没有可行的理由去做我所做的事情?

序列化是一项棘手的工作,我正在努力思考使用它的最佳方法以及避免它的正确时间。

4

1 回答 1

2

正如您所说,序列化无法跟踪引用。要么序列化整个对象图,要么在反序列化时提出自己的解决引用的方法。因此,您所做的事情是正确的,尽管您可能希望找到更好的解决方案,而不是仅仅将所有内容都挂在静态类中。

此外,您可能想改变策略。您可以只保存所需的信息,而不是使用所有索引保存对象本身,然后拥有一个解析器工厂,它将读取此信息并使用正确的值填充对象。

于 2012-12-27T00:21:04.213 回答