Question

Je suis en train d'écrire un système de particules en utilisant XNA. Ce que je voudrais faire est d'utiliser un fichier externe (XML par exemple) et être en mesure de modifier ce fichier, alors 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.

Ma proposition initiale: Utilisez un Filewatcher (ne me souviens pas du nom de la classe exacte) pour surveiller le fichier d'effet des particules et lorsque la date change, rechargent le fichier provoquant ainsi les modifications à apporter.

Toute aide serait appréciée.

Était-ce utile?

La solution

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 de multiples événements de changement de un seul changement. Aussi quelques programmes, comme photoshop sauver un fichier temporaire, puis supprimez le original et renommer le temporaire le fichier au nom d'origine. mon système tampons événements du système de fichiers et les combine en un seul événement lorsque c'est possible. Parce qu'ils sont Buffered cela me permet également d'appliquer les événements au contenu à un point approprié dans le programme. Si vous ne tamponner pas ces événements pourraient déclencher pendant que la ressource que vous êtes essayer de remplacer est utilisé.

  • Shawn Hargreaves a écrit sur compilation effet et contenu automatisation de pipeline dans XNA Game studio 4.0 .

  • AppHub a un code Snippet WinForms Série 2: contenu Chargement qui montre comment utiliser MSBuild au contenu de construction dynamique. J'ai trouvé cette méthode est plus lente que l'invocation de l'importateur et le processeur directement.

  • Dans mon système, toutes les références à des ressources dynamiques sont des références indirectes. Ces références indirectes sont attribués et suivis par un gestionnaire de ressources. Lorsqu'une ressource est construit dynamiquement le gestionnaire de ressources remplace la référence réelle à l'intérieur de la référence indirecte. Une ressource événement changé est généré par la référence indirecte afin que les clients peuvent prendre des mesures si nécessaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top