我已經盡力讓我周圍的內容處理器和紋理的頭,但我有點困惑...我有2種情況:XNA內容管道和紋理
一個是包含一個模型紋理,導入器加載xml並將紋理文件名傳遞給處理器,但我只能得到一個TextureContent,它似乎是對紋理的編譯時引用,但這並不能幫助我填充模型的Texture2D位。
第二種情況是我想搭載紋理處理器從紋理文件創建一個spritemap對象,spritemap基本上是一個包含紋理和sprite寬度/高度的模型。
這一直讓我爲難的事情是這些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在通過contentManager加載時似乎神奇地變成了一個Texture ...所以我a對於我在這種情況下如何獲得紋理有點困惑。由於這兩種方案都非常相似,我相信,如果我解決了一個,我會解決他們兩個,但理想的我希望能夠去:
contentManager.Load<ISpriteMap>("someTextureAsset");
如果任何人都可以解釋如何使這個看似神奇的過程中工作,我會給你很多讚譽!
我不認爲這實際上回答了這個問題,你只是告訴我內容管道確實在較高的水平什麼...我知道它做什麼,我已經看到你所談論的例子,但最讓我困惑的是正在使用的TextureContent和ExternalReferences。但是,據說我在其他一個stackexchange站點上稍微不同的主題上做了類似的帖子,這個站點在一個回合的方式回答了這個問題,所以會在這裏鏈接。 – Grofit 2012-01-16 15:31:37