現在、XNA を使用してパーティクル システムを作成しています。私がやりたいのは、外部ファイル (XML など) を使用して、アプリケーションの実行中にこのファイルを変更できるようにすることです。一度保存すると、変更がパーティクル システムに反映されます。
私の最初の提案: FileWatcher (正確なクラス名を思い出せません) を使用してパーティクル エフェクト ファイルを監視し、日付が変更されたらファイルをリロードして、変更を加えます。
どんな助けでも大歓迎です。
現在、XNA を使用してパーティクル システムを作成しています。私がやりたいのは、外部ファイル (XML など) を使用して、アプリケーションの実行中にこのファイルを変更できるようにすることです。一度保存すると、変更がパーティクル システムに反映されます。
私の最初の提案: FileWatcher (正確なクラス名を思い出せません) を使用してパーティクル エフェクト ファイルを監視し、日付が変更されたらファイルをリロードして、変更を加えます。
どんな助けでも大歓迎です。
あなたは正しい軌道に乗っています。
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 は、1 つの変更に対して複数の変更イベントを生成することがあります。また、Photoshop などの一部のプログラムは、一時ファイルに保存した後、元のファイルを削除し、一時ファイルの名前を元の名前に変更します。私のシステムは、ファイル システム イベントをバッファリングし、可能な場合はそれらを単一のイベントに結合します。これらはバッファリングされるため、プログラムの適切な時点でイベントをコンテンツに適用することもできます。バッファリングしない場合、置き換えようとしているリソースが使用されている間にこれらのイベントがトリガーされる可能性があります。
Shawn Hargreaves は、XNA Game Studio 4.0 での効果のコンパイルとコンテンツ パイプラインの自動化について書いています。
AppHub には Code Snippet WinForms Series 2: Content Loadingがあり、MSBuild を使用してコンテンツを動的に構築する方法を示しています。この方法は、インポーターとプロセッサーを直接呼び出すよりも遅いことがわかりました。
私のシステムでは、動的リソースへの参照はすべて間接参照です。これらの間接参照は、リソース マネージャーによって割り当てられ、追跡されます。リソースが動的に構築されると、リソース マネージャーは間接参照内の実際の参照を置き換えます。クライアントが必要に応じてアクションを実行できるように、間接参照を介してリソース変更イベントが生成されます。