我在XNA有一个2D游戏引擎,开发得很好。它的布局如下:C#XML序列化和涉及继承
一个中央GameManager,包含一个SceneObjectManagers列表(用于分层)。
SceneObjectManager包含SceneObjects的集合,它是一个抽象基类为对象的ID的字符串(即从列表inehrits,具有运算符[字符串]重载的类)。
有一个SceneObject2D和AnimatedSceneObject2D类,它们在链中继承(2D从SceneObject开始,从2D开始)。它们包含相关信息(位置,源矩形,动画等)。
然后我有第二个项目(使用引擎的实际游戏),它具有像PlayerObject,AIObject,FireballScript等,它从SceneObject2D和AnimatedSceneObject2D继承取决于它需要什么(如果它显示,动画,甚至都不)。
还有更多,但你得到的图片。
我已经开始解决一个关卡编辑器的想法,因为写出几百到几千实体发展的含量最高,并通过试验和错误或广泛的纸数学完美定位他们也只是疯狂。
相当简单的概念刷,选择实体,设置属性,并最终导出一个XML文件,其中包含每个实体,它们的位置和属性,ID等等。但问题在于XML序列化本身保存对象。
本质上,我会序列化GameManager,其中包含所有sceneobjectmanagers,其中包含所有场景对象。然后,我可以加载XML文件,这将是我的水平。但是接下来就存在继承问题,以及包含对象(和接口以及所有这些)的更复杂的对象。
对于每个将成为基类的类,我看不到自己写出[XmlInclude(typeof(T))],更不用说更复杂的对象了。
我开始继承IXmlSerializable,但在为所有我的对象写出WriteXml和ReadXml的努力之前,我想知道是否有更好,更简单的方法来解决这个问题。
我想指出它需要是可移植的格式(因此是XML),因为我想重新使用编辑器的导出,并进行了一些调整,以用于使用相同类布局的C++引擎(我正在考虑使用Boost.serialization)。
NetDataContractSerializer解决了XmlSerializer的许多限制;如果可能的话,我建议你在XmlSerializer上使用它。 – Will 2010-11-04 20:02:12