3

XNA で実行時にテクスチャやその他のコンテンツ ファイルを更新する方法を探しています。これにより、アプリケーションの外部で変更された場合、フォーカスが戻ったときにゲームで自動的に更新されます。

これは、Texture2D とストリームからの読み込みで可能のようですが、特定のリソースへの直接パスを取得できません。

これはコンテンツ パイプラインと .xnb では機能しないことを認識していますが、デバッグと開発の目的では非常に便利です。

このようなものが XNA で正常に実装されているのを見た人はいますか?

4

1 に答える 1

1

まず、プッシュモデルとプルモデルのどちらを採用するかを決める必要があります。プッシュモデルでは、アセットを変更したアプリケーション/環境は、アセットが変更されてリロードする必要があることを、実行中のゲームに何らかの方法で通知する必要があります。これは、非常に単純なメッセージキューで実行できます。

プルモデルでは、ゲームは定期的にすべてのゲームアセットをチェックして、変更されているかどうかを確認し、変更されている場合はリロードします。これは、パフォーマンスが低い場合でも、より単純なソリューションになります。

より大きな懸念は、アプリの実行中にゲームがアセットの再読み込みを適切に処理できるかどうかです。おそらく、アセットをロードしてから、ゲーム内の「ライブ」アセットでそれらを「スワップ」する、ある種のバックグラウンドスレッドを実装する必要があります。または、アセットがリロードされるたびにゲームが一時停止することもあります。いずれの場合も、コンテンツパイプラインが現在どのように機能しているかによっては、これがプロセスの最も複雑な部分になる可能性があります(すでにバックグラウンドローダースレッドがある場合など)。

コメントに応じて編集:

この方法を使用して、コンテンツフォルダへの完全修飾パスを取得できます:)

static public String FullContentDirectory(this ContentManager content)
{
    var appPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);

    return System.IO.Path.Combine(appPath, content.RootDirectory);
}

さて、あなたの次の問題は、アセット名からファイル拡張子をどのように知るかということだと思います。または、アセット名がファイル名と異なる場合はどうなりますか?

于 2011-09-06T08:10:33.997 に答える