Я пишу небольшую 2D-игру-шутер на XNA, и я решил, что для того, чтобы можно было реализовать в игре контент, созданный по заказу, он загружает определения игровых объектов из файлов XML. Когда я узнал, что XNA имеет простой в использовании XML-сериализатор, он сделал его очень простым. Проблема в том, что мои объекты, которые я хочу сериализовать, DrawableGameComponent
s. XML-сериализатор XNA, класс ContentTypeWriter
, который вы расширяете для создания пользовательских средств записи содержимого, требует, чтобы у объекта был конструктор без аргументов по умолчанию. DrawableGameComponent
, однако, требует в своем конструкторе объект Game
и не позволит вам установить игру после инициализации объекта. Однако я не могу изменить поведение ContentTypeWriter
достаточно, чтобы принять непустой конструктор, потому что содержимое загружается совершенно другим методом, который я не могу перезаписать. По сути, у меня есть это:
class Star : DrawableGameComponent{
public Star(Game game)
: base(game)
{
}
}
С ContentTypeWriter
, требующим конструктор без аргументов. Хотя я не могу его создать, потому что тогда у меня нет возможности поместить объект Game в класс Star
. Я просто не могу сделать это DrawableGameComponent
, но я пытаюсь отделить эти объекты от основного класса игры, чтобы я мог их повторно использовать и т. Д., И без объекта Game
это нелепо сложно. Поэтому мой вопрос: кто-нибудь знает, как изменить ContentTypeWriter достаточно, чтобы конструктор мог иметь аргументы, или каким-либо образом обойти это?
Я также думал о написании собственного кода синтаксического анализа XML с использованием XPath или классов Linq XML, но XNA выбрасывает, если у меня есть какие-либо файлы XML в проекте, которые не следуют схеме XNA и не будут собираться. Было бы разумно написать базовый класс только с первичными полями класса и версией DrawableGameComponent
, использующей шаблон декоратора, и сериализовать только базовый класс? Я вырываю свои волосы, пытаясь обойти это, и задаюсь вопросом, что именно я должен делать в этой ситуации.