2016-04-23 1 views
0

現在、ゲームレベルのコンテンツを表すと考えられるコンテンツタイプLevelを実装しています(最も重要なのは、別々のテクスチャを参照してください)。入力レベルのデータには、ソーステクスチャリソースへのフルパスが含まれています。XNA:ソースファイルのパスからコンテンツ名を確認する

問題:コンパイルされたレベルのコンテンツに書き込むことができる結果のコンテンツ "名前"を特定する方法はありますか?テクスチャは再利用されることになっています。そのため、テクスチャをレベルのコンテンツに焼くことは悪い考えです(スペースを無駄にする)。コンテンツ作成中に(例えば、レベルエディタ内で)名前を提供することは不可能です。

ソースファイルLevels/Level01.levelは、フルパス名を使用してTextures/Granite.pngTextures/Dirt.pngを参照しています。私はTextures/GraniteTextures/Dirtをコンパイル時に推論したいと思います。

答えて

0

正しい解決策はプレーンな文字列名の代わりにExternalReference<T>クラスを使用することでした。

レベル側のコンテンツオブジェクトには、ExternalReference<TextureContent>(またはさらにはList<ExternalReference<TextureContent>>)のインスタンスが含まれています。 (ContentWriterを介して)シリアル化されたとき、これは参照を適切に調整することに注意します。

読者の側は平文のContentReader.ReadObject<>コールに簡略化されています。

public sealed class LocationReader : ContentTypeReader<Location> 
{ 
    protected override Location Read(ContentReader input, Location existingInstance) 
    { 
     List<Texture2D> textures = input.ReadObject<List<Texture2D>>(); 
    } 
} 

注:正しくライタークラスでGetRuntimeType()メソッドをオーバーライドすることに注意してください。これは私のために奇妙なボールの源だったReflectionReader<T>問題です。

関連する問題