0

通常、イメージ ファイル (xnb 形式にコンパイルされていない) で行うように、ゲームにコンパイル済みの xnb テクスチャをメイン ゲーム クラスの外にロードさせようとしていますが、機能しません。

Texture2D.FromStream「予期しないエラー」を返し、

using (var g = new Game1())
{
    Texture2D t2d = g.Content.Load<Texture2D>(file);
}

ファイルが存在しないことを示していますが、File.Existsそのすぐ隣には実際に存在することが示されています。

これらの xnb ファイルをプロジェクトに追加することはできません。コンパイル時にそれらのファイルが存在しないからです。これを解決するにはどうすればよいですか?


より多くのコード:

public void LoadXNA(Microsoft.Xna.Framework.Content.ContentManager cmgr, string path)
{
    string xnaTexturesPath = path.Substring(0, path.LastIndexOf("\\")) + "\\textures xna";

    if (Directory.Exists(xnaTexturesPath))
    {
        var files = Directory.GetFiles(xnaTexturesPath, "*.xnb");

        foreach(var file in files)
        {
            string filename = Path.GetFileNameWithoutExtension(file);

            string ext = Path.GetExtension(file);
            string pathNoext = file.Replace(ext, "");

            var t2d = cmgr.Load < Texture2D > (pathNoext);
        }
    }
}
4

1 に答える 1

1

まず、全体は必要ありませんGame。必要なのはGraphicsDevice. テクスチャはグラフィックス デバイスにバインドされていることに注意してください。したがって、テクスチャが存在する間は存在し続ける必要があります。テクスチャは複数のデバイス間で共有できません。

クラスContentManagerなしでを取得するには、 XNA WinForms Sampleをご覧ください。特に、特定のコントロールへのバインドを作成する方法(これは である可能性があります。他の方法で使用する必要がない場合は非表示にすることができます)、サービス プロバイダーを作成して を配置する方法を示します。 、そのサービス プロバイダを使用してを作成する方法について説明します。GameGraphicsDeviceFormIGraphicsDeviceServiceContentManager

または、直接使用できるコードを提供するこの回答をご覧ください (同じ WinForms サンプルのいくつかのクラスを使用します)。これは XNA 3.1 であるため、4.0 用に微調整が必​​要になる場合がありますが、通常は動作するはずです。

Texture2D.FromStreamXNB ファイルを読み込めません。ContentManagerXNBファイルは、基本的にすべてのXNBのものを「アンラップ」するために実行する必要があります。

発生している問題はContentManager.Load、ファイル名にファイル拡張子が含まれていることが原因である可能性があります。が追加.xnbされますが、追加すると混乱します。

于 2013-01-12T11:53:15.053 に答える