1

我目前正在使用 XNA 编写粒子系统。我想做的是使用外部文件(例如 XML)并能够在应用程序运行时修改此文件,一旦保存,更改将反映在粒子系统中。

我最初的建议:使用 FileWatcher(不记得确切的类名)来监视粒子效果文件,当日期更改时,重新加载文件从而导致进行更改。

任何帮助,将不胜感激。

4

1 回答 1

0

你在正确的轨道上。

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 Game Studio 4.0 中的效果编译和内容管道自动化的文章。

  • AppHub 有一个代码片段WinForms 系列 2:内容加载,它展示了如何使用 MSBuild 动态构建内容。我发现这种方法比直接调用导入器和处理器要慢。

  • 在我的系统中,所有对动态资源的引用都是间接引用。这些间接引用由资源管理器分配和跟踪。当资源被动态构建时,资源管理器会替换间接引用中的实际引用。通过间接引用生成资源更改事件,因此客户端可以在需要时采取行动。

于 2010-10-21T06:51:10.790 回答