粒子効果を変更するためのXMLのリアルタイムの変更
-
09-10-2019 - |
質問
私は現在、XNAを使用して粒子システムを書いています。私がやりたいのは、外部ファイル(たとえばXML)を使用し、アプリケーションが実行されている間にこのファイルを変更できるようになり、保存すると、変更は粒子システムに反映されます。
私の元の提案:ファイルウォッチャーを使用して(正確なクラス名を思い出せません)、粒子効果ファイルを監視し、日付が変更されたら、ファイルをリロードして変更を行います。
どんな助けも感謝します。
解決
あなたは正しい軌道に乗っています。
Create a System.IO.FileSystemWatcher.
Subscribe to the Changed event.
When the Changed event occurs
If the path/file extension corresponds to a buildable resource type
Either
Directly create and invoke a content importer and processor. (Xna 4.0)
Or
Use MSBuild to build a dummy content project.
Replace references to the existing resource with the newly built resource
Dispose of the old resource if necessary
ノート:
FilesystemWatcherは、単一の変更のために複数の変更イベントを生成する場合があります。また、Photoshopなどの一部のプログラムは一時ファイルに保存し、元のファイルを削除して、一時ファイルの名前を元の名前に変更します。私のシステムは、ファイルシステムイベントをバッファリングし、可能な場合はそれらを単一のイベントに結合します。それらはバッファリングされているため、これにより、プログラムの適切なポイントでイベントをコンテンツに適用することもできます。あなたが交換しようとしているリソースが使用されている間に、これらのイベントをバッファリングしないと、これらのイベントがトリガーされる可能性があります。
Shawn Hargreavesは書いています XNAゲームスタジオ4.0のエフェクトコンピレーションとコンテンツパイプラインオートメーション.
AppHubにはコードスニペットがあります Winformsシリーズ2:コンテンツの読み込み これは、MSBuildを使用してコンテンツを動的に構築する方法を示しています。この方法は、インポーターとプロセッサを直接呼び出すよりも遅いことがわかりました。
私のシステムでは、動的リソースへのすべての参照は間接的な参照です。これらの間接的な参照は、リソースマネージャーによって割り当てられ、追跡されます。リソースが動的に構築されると、リソースマネージャーが間接参照内の実際の参照を置き換えます。リソース変更されたイベントは、間接リファレンスを通じて生成され、必要に応じてアクションを実行できます。