2011-07-21 11 views
4

を他のコンテンツをロードします。その実験の中で、読み込みが必要な別の「コンテンツアイテム」を含むファイルを読み込もうとしています。例えば:それは単に文字列なのでXNAコンテンツパイプライン拡張 - 私は現在、XNAコンテンツパイプラインの拡張機能を試していたカスタムプロセッサ内

public class CustomItem 
{ 
    public string Name; 
    public Texture2D Texture; 
} 

は今、私のコンテンツプロセッサでは、私は、名前フィールドを「CustomItemの」の新しいインスタンスを作成および初期化することができます。ただし、コンテンツのコンパイル中にテクスチャファイルを読み込むことはできません(注:テクスチャは一例に過ぎず、理想的には他のコンテンツタイプをロードできるようにしたい)。

// ... start class ... 

public override CustomItem Process(SomeInputFormat input, ContentProcessorContext context) 
{ 
    return new CustomItem() 
    { 
     Name = input.ItemName, 
     Texture = context.LoadAsset<Texture2D>(input.ItemTexturePath) // I realise LoadAsset<T>() does not exist - it's an example of what would be ideal 
    }; 
} 

// ... end class ... 

が、これは実際に可能であれば誰もが知っていて、もしそうなら、どのようにそれについて移動する:

私が探している何が何かに似ていますか?可能であれば、他のコンテンツアイテムを遅くロードする方法や、バイナリリーダーやライターを使用して独自のカスタムコンテンツを作成する方法をとってはいけません。

答えて

5

あなたは、コンテンツパイプラインでTexture2Dを使用することはできません。あなたはTexture2DContentを使用しなければなりません。これは前者のプロキシタイプです。次に、コンテンツの作成時にメンバーをTexture2DContentにするためのタイプのメカニズムが必要ですが、実行時にはTexture2Dとなります。 This articleには3つの方法があります。

あなたのTexture2DContentオブジェクトを取得するためにContentProcessorContext.BuildAndLoadAssetを使用することができます。このテクスチャデータは、そのアセットのファイル.xnbに埋め込まれます。

実際にパイプラインでテクスチャデータを使用する必要がない場合、特に複数のアセット間で同じテクスチャを共有する場合は、ContentProcessorContext.BuildAssetを使用して、テクスチャに組み込まれているExternalReferenceを取得できますアセットの.xnbファイルの外部にある.xnbファイルにコピーしてください(ContentManagerがあなたに対応します)。

+0

迅速な返信のための歓声。私はTexture2DContentのどこかを読んでいましたが、それについてもっと良い方法があることを望んでいました。その記事は本当によく説明していますので、私はそれを完全に理解しています。 –

関連する問題