я пытался получить мою голову вокруг процессора контента и текстур, но я немного запуталась ... У меня есть 2 сценария:XNA Content Pipeline и текстуры
Одним из них является модель, которая содержит текстура, импортер загружает xml и передает имя файла текстуры процессору, но я могу получить только TextureContent, который, похоже, является ссылкой на текстуру времени компиляции, но это не помогает заполнить бит Texture2D моей модели ,
Второй сценарий - я хочу, чтобы конгруэнция текстурного процессора создавала объект spritemap из файла текстуры, spritemap - это в основном модель, которая содержит текстуру и ширину/высоту спрайта.
Дело в том, что продолжает получать меня в тупик именно эти ExternalReference и TextureContent, как модель, позволяет сказать:
public class SpriteMap
{
public Texture2D Texture { get; private set; }
public int SpriteWidth { get; private set; }
public int SpriteHeight { get; private set; }
public SpriteMap(Texture2D texture, int spriteWidth, int spriteHeight)
{
this.texture = texture;
this.spriteWidth = spriteWidth;
this.spriteHeight = spriteHeight;
}
}
Тогда у меня есть процессор контента, как так:
[ContentProcessor(DisplayName = "TextureToSpriteMapProcessor")]
public class TextureToSpriteMapProcessor : ContentProcessor<Texture2D, ISpriteMap>
{
[DisplayName("Sprite Width")]
[DefaultValue(64)]
[Description("The size of each sprite's width within the sprite map.")]
public virtual int SpriteWidth { get; set; }
[DisplayName("Sprite Height")]
[DefaultValue(64)]
[Description("The size of each sprite's height within the sprite map.")]
public virtual int SpriteHeight { get; set; }
public override ISpriteMap Process(Texture2D input, ContentProcessorContext context)
{ return new SpriteMap(input, SpriteWidth, SpriteHeight); }
}
Теперь он жалуется, что процессору предоставлен TextureContent, но это не текстура ... но по какой-то причине TextureContent, похоже, волшебным образом превращается в Texture, когда он загружается через ContentManager ... поэтому я m немного озадачен тем, как я могу получить текстуру в этом случае. Поскольку оба сценария достаточно похожи, я уверен, если я решаю один я буду решать их обоих, но в идеале я хочу, чтобы быть в состоянии пойти:
contentManager.Load<ISpriteMap>("someTextureAsset");
Если кто-нибудь может объяснить, как сделать это, казалось бы волшебную работу процесса, я даст вам много похвалы!
Я не думаю, что это на самом деле отвечает на вопрос, вы просто говорите мне, что конвейер содержимого делает на высоком уровне ... Я знаю, что он делает, и я видел пример вы говорите , но то, что меня больше смутило, это используемые TextureContent и ExternalReferences. ОДНАКО, что, как я сказал, я сделал аналогичную запись на несколько другой теме на одном из других сайтов stackexchange, которые ответили на этот вопрос круглым путем, поэтому свяжут это здесь. – Grofit