【发布时间】:2022-01-20 17:04:30
【问题描述】:
我目前正在使用 XNA 编写粒子系统。我想做的是使用外部文件(例如 XML)并能够在应用程序运行时修改此文件,一旦保存,更改将反映在粒子系统中。
我原来的提议: 使用 FileWatcher(不记得确切的类名)来监视粒子效果文件,当日期更改时,重新加载文件从而导致更改。
任何帮助将不胜感激。
【问题讨论】:
标签: xna particle-system
我目前正在使用 XNA 编写粒子系统。我想做的是使用外部文件(例如 XML)并能够在应用程序运行时修改此文件,一旦保存,更改将反映在粒子系统中。
我原来的提议: 使用 FileWatcher(不记得确切的类名)来监视粒子效果文件,当日期更改时,重新加载文件从而导致更改。
任何帮助将不胜感激。
【问题讨论】:
标签: xna particle-system
你在正确的轨道上。
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 写过关于 Effect compilation and Content Pipeline automation in XNA Game Studio 4.0 的文章。
AppHub 有一个代码片段WinForms Series 2: Content Loading,它展示了如何使用 MSBuild 动态构建内容。我发现这种方法比直接调用导入器和处理器要慢。
在我的系统中,所有对动态资源的引用都是间接引用。这些间接引用由资源管理器分配和跟踪。当资源被动态构建时,资源管理器会替换间接引用中的实际引用。通过间接引用生成资源更改事件,以便客户端可以在需要时采取行动。
【讨论】: