2010-10-20 1 views
1

J'écris actuellement un système de particules utilisant XNA. Ce que je voudrais faire est d'utiliser un fichier externe (XML par exemple) et être capable de modifier ce fichier, pendant que l'application est en cours d'exécution, et une fois enregistré, les changements seront reflétés dans le système de particules.Modifications en temps réel de XML pour modifier l'effet des particules

Ma proposition originale: Utilisez un FileWatcher (je ne me souviens plus du nom exact de la classe) pour surveiller le fichier d'effets de particules et, lorsque la date change, rechargez le fichier, ce qui entraînera les changements.

Toute aide serait appréciée.

Répondre

0

Vous êtes sur la bonne voie.

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 

Notes:

  • Le FileSystemWatcher parfois génère plusieurs événements de changement pour un seul changement. En outre, certains programmes , comme photoshop enregistrer dans un fichier temporaire , puis supprimer l'original et renommer le fichier temporaire au nom d'origine. Mon système met en mémoire tampon les événements du système de fichiers et les combine en événements uniques lorsque cela est possible. Parce qu'ils sont mis en mémoire tampon cela me permet également d'appliquer les événements au contenu à un point approprié dans le programme. Si vous ne mettez pas en mémoire tampon ces événements, le déclencheur peut être déclenché alors que la ressource que vous essayez de remplacer remplace . Shawn Hargreaves a écrit environ Effect compilation and Content Pipeline automation in XNA Game Studio 4.0

  • AppHub a un fragment de code WinForms Series 2: Content Loading qui montre comment utiliser MSBuild pour créer du contenu dynamiquement. J'ai trouvé cette méthode est plus lente que d'appeler directement l'importateur et le processeur.

  • Dans mon système, toutes les références aux ressources dynamiques sont des références indirectes. Ces références indirectes sont allouées et suivies par un gestionnaire de ressources. Lorsqu'une ressource est créée dynamiquement, le gestionnaire de ressources remplace la référence réelle dans la référence indirecte. Un événement modifié de ressource est généré via la référence indirecte afin que les clients puissent prendre des mesures si nécessaire.

+0

Notez que vous n'avez pas nécessairement besoin de compiler le fichier XML. Pour convertir Xml directement en/à partir d'un objet dans la mémoire, vous pouvez utiliser XmlSerializer ou IntermediateSerializer (si vous voulez le conserver dans le format utilisable du pipeline de contenu et que cela ne vous gêne pas d'avoir à installer les outils de développement) – Aranda

Questions connexes