【发布时间】:2009-06-16 00:59:16
【问题描述】:
我正在用 XNA 编写一个小型 2D 射击游戏,我决定这样可以在游戏中实现自定义内容,它会从 XML 文件加载游戏对象的定义。当我发现 XNA 有一个易于使用的 XML 序列化器时,它变得更加简单。问题是,我要序列化的对象是DrawableGameComponents。 XNA 的 XML 序列化程序,ContentTypeWriter 类,您可以扩展它来创建自定义内容编写器,它要求对象有一个没有默认参数的构造函数。但是,DrawableGameComponent 在其构造函数中需要一个Game 对象,并且在对象初始化后不允许您设置游戏。但是,我无法充分修改ContentTypeWriter 的行为以接受非空白构造函数,因为内容是通过完全不同的方法加载的,我无法覆盖。所以基本上我有这个:
class Star : DrawableGameComponent{
public Star(Game game)
: base(game)
{
}
}
ContentTypeWriter 需要不带参数的构造函数。但我无法创建一个,因为这样我就无法将 Game 对象放入 Star 类中。我无法将其设为DrawableGameComponent,但我试图将这些对象与主要游戏类分离,以便我可以重用它们等,而如果没有Game 对象,这将非常困难。因此,我的问题是,有没有人知道如何修改 ContentTypeWriter 以允许带有参数的构造函数或任何解决方法?
我还考虑过使用 XPath 或 Linq XML 类编写我自己的 XML 解析代码,但是如果我在项目中有任何 XML 文件不遵循 XNA 架构并且不会构建,那么 XNA 会很合适。编写一个只包含类的主要字段和使用装饰器模式的DrawableGameComponent 版本的基类,并且只序列化基类是否合理?我正在拔头发试图解决这个问题,并想知道在这种情况下我到底应该做什么。
【问题讨论】: