2011-06-23 17 views
3

XNAテクスチャの読み込みを合理化しようとすると、多くの問題が発生しています。私は指定されたディレクトリから動的にテクスチャをロードすることをあきらめました。今は、ソリューションのコンテンツ内の整理されたフォルダのコレクションで作業しようとしています。私は、次のコード行を使用しようとしている:XNA:コンテンツのサブフォルダから読み込み

Content.Load<Texture2D>(".\\Graphics\\Characters\\Char1"); 

「CHAR1は」正しい資産名であり、それは私のソリューションエクスプローラでのコンテンツの下に「グラフィック\文字」に保存されているが、それはまだ投げます"ファイルが見つかりません"というエラーです。私はここで間違って何をしていますか?

EDIT:誤ったディレクトリ構造を作成したdebug binフォルダが表示されます:\ Graphics \ Characters \ Characters。関係なく、助けてくれてありがとう!

+0

特定のディレクトリ(例えば 'System.IO.Path'を使用)にファイルリストを取得し、そのファイルリストを使用して' .xnb'拡張を削除し、アセットのディレクトリ全体を動的に読み込むことは可能です。 –

答えて

1

作業ディレクトリは何ですか?通常はbin \ Debug(生成されるexeの場所)であり、Visual Studioにコンテンツファイルをこのディレクトリにコピーするよう指示していない限り、そこには存在しません。この

  1. を修正する

    いくつかのオプションあなたは、あなたがかどうかを確認することができます

  2. たら、あなたはそれらを手動でコピーすることができますのVisual Studioにコンテンツファイルを追加し、Copy
  3. のモードを展開するためにそれらを設定することができます現在のディレクトリには特定のファイルが含まれていて、それがない場合は2つのレベルになります
  4. 定数を使用してベースディレクトリを定義し、デバッグ中であるかどうかに応じてフレキシブルに設定できます。ここで

ここ3

private string BaseDirectory = "."; 
if (!Directory.Exists(".\Graphics")) 
{ 
    BaseDirectory = @"..\.."; 
} 
... 
Content.Load<Texture2D>(BaseDirectory + @"\Graphics\Characters\Char1"); 

の一例であるあなたはリリースモードで実行している場合、これはあまりにもスムーズに動作しないことに注意して、4の一例です。

#if DEBUG 
    private const string BaseDirectory = @"..\.."; 
#else 
    private const string BaseDirectory = @"."; 
#endif 
... 
Content.Load<Texture2D>(BaseDirectory + @"\Graphics\Characters\Char1"); 

@から始まる文字列は\エスケープを許可するため、ディレクトリを定義するために使用する方がはるかに簡単ですしないことに注意してください。

+0

Coincoinは、RootDirectoryを変更することについて良い点を示しました。これはおそらく、exeファイルの場所とコンテンツファイルの場所との区別を伝播する最良の方法です。 – Guvante

2

ContentRootDirectoryプロパティをコンテンツファイルのルートの場所に設定できます。これにより、パスが正しく機能します。

また、単一のドット.\

4

の必要はあなたのスラッシュを削除してみてください。例:

Content.Load<Texture2D>("Graphics\\Characters\\Char1"); 

これらのアセットにコンテンツプロジェクトを使用していますか? 'Content Root'ディレクトリを設定することができ、アセットはすべてそこからの相対パスにあります。

this msdn entryをご覧ください。うまくいけば、あなたを助けてくれるかもしれません。がんばろう。

4

あなたが何かをアップロードする前に、必ずこれを行うにし、ファイルは「コンテンツ」に位置していることを、言っているから:

Content.RootDirectory = "Content" 

一部を取り除く「\」。

関連する問題