Я пытаюсь загрузить настраиваемый класс, содержащий Texture2D
, из файла xml с помощью импортера по умолчанию (XML Content ), без процессора.
Многочисленные онлайн-исследования и много работы с другими ошибками привели меня к этому XML:
<?xml version="1.0" encoding="utf-16"?>
<XnaContent xmlns:Components="Entities.Components">
<Asset Type="EntitiesContentPipeline.EntityTemplateContent">
<Name>entity name</Name>
<TestTexture>
<Reference>#External1</Reference>
</TestTexture>
</Asset>
<ExternalReferences>
<ExternalReference ID="#External1" TargetType="Microsoft.Xna.Framework.Graphics.Texture2D">C:\Documents and Settings\GDuckett\My Documents\Visual Studio 2010\Projects\Gravitron\Gravitron\Gravitron\bin\x86\Debug\Content\Bullet.xnb</ExternalReference>
</ExternalReferences>
</XnaContent>
Да, мне тоже не нравится жестко запрограммированный путь, но если я могу заставить это работать без пользовательский считыватель и / или писатель для каждого типа, содержащий Texture2D
, я могу жить с этим.
Ниже представлена моя версия содержимого класса (используемого конвейером):
[ContentSerializerRuntimeType("Entities.Content.EntityTemplate, Entities")]
public class EntityTemplateContent
{
public string Name;
public ExternalReference<Texture2D> TestTexture;
public EntityTemplateContent()
{
}
}
Ниже представлена моя версия среды выполнения:
public class EntityTemplate
{
public string Name;
public Texture2D TestTexture;
public EntityTemplate()
{
}
}
Если я попробую выполнить var test = Content.Load
ниже я получаю ошибку:
Ошибка загрузки "Bullet". ContentTypeReader Microsoft.Xna.Framework.Content.Texture2DReader, Microsoft.Xna.Framework.Graphics, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 842cf8be1de50553 конфликтует с существующим обработчиком Microsoft.Xna.Framework.Content.ReflectiveReader`1 [[Microsoft .Xna.Framework.Graphics.Texture2D, Microsoft.Xna.Framework.Graphics, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 842cf8be1de50553]], Microsoft.Xna.Framework, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 842cf8be1de50553 для типа Microsoft.Xna.Framework.Graphics.Texture2D.
Похоже, что программа чтения времени выполнения нашла 2 считывателя для работы с активом Texture2D
, считыватель ReflectiveReader
и Texture2DReader
.
Как я могу решить эту проблему, чтобы в итоге объект был правильно заполнен, а свойство Texture2D
ссылается на загруженную текстуру?
Примечание: я не хочу добавить еще одно строковое свойство и создать метод для моего объекта с именем LoadContent
или что-то в этом роде. Я бы хотел, чтобы Content.Load
был единственным, что мне нужно было позвонить.
Я также хочу избегать написания моих собственных читателей / писателей для каждого типа, который содержит свойство Texture2D
.
В идеале я хочу избежать создания класса-оболочки для Texture2D или подкласса, но если альтернативы нет, то я рад решению, которое делает это.