私はコンテンツプロセッサとテクスチャのまわりで私の頭を取得しようとしましたが、私は少し混乱しています...私は2つのシナリオがあります。XNAコンテンツパイプラインとテクスチャ
一つは、A含むモデルでありますテクスチャでは、インポータはxmlを読み込んでテクスチャファイル名をプロセッサに渡しますが、TextureContentを取得することはできますが、これはテクスチャへのコンパイル時の参照と思われますが、これは私のモデルのTexture2Dビット。
第2のシナリオは、テクスチャファイルからスプライトマップオブジェクトを作成するためにテクスチャプロセッサをピギーバックしたいのですが、スプライトマップは基本的にテクスチャとスプライトの幅/高さを含むモデルです。私は困惑なっ保ち
事はこれら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に変わるようです。私はこのインスタンスでどのようにテクスチャを得ることができるのか、ちょっと困惑しています。私は、誰もがこの一見魔法のプロセスを機能させるためにどのように説明することができた場合
contentManager.Load<ISpriteMap>("someTextureAsset");
:私は1つを解決した場合、両方のシナリオは、私は確信しているかなり似ているように私はそれらの両方を解決しますが、理想的に私は行くことができるようにしたいですあなたに多くの賞賛を与えるでしょう!
しかし、私を最も混乱させるのは、使用されているTextureContentとExternalReferencesです。しかし、私はこの質問に答えた他のスタック・エクスチェンジ・サイトのちょっと異なるテーマについて同様の投稿をしたと言われています。 – Grofit