2011-09-06 6 views
3

Je cherche un moyen de mettre à jour les textures et autres fichiers de contenu lors de l'exécution dans XNA, de sorte que s'il est modifié en dehors de l'application, il se mettra à jour automatiquement.Mise à jour des ressources en temps réel dans XNA

Cela semble possible avec Texture2D et le chargement à partir d'un flux, mais je suis incapable d'obtenir un chemin direct vers une ressource donnée.

Je me rends compte que cela ne fonctionnera pas avec le pipeline de contenu et .xnb, mais à des fins de débogage et de développement, il serait extrêmement utile.

Est-ce que quelqu'un a vu quelque chose comme ceci mis en œuvre avec succès avec XNA?

+0

pas sûr si vous êtes toujours à la recherche de cela, mais si vous êtes, nous avons une solution construite sur mesure qui fonctionne dans la plupart des cas. – roundcrisis

Répondre

1

Tout d'abord, vous devrez décider si vous souhaitez adopter un modèle poussé ou tiré. Dans un modèle push, l'application/l'environnement qui a changé l'actif devra en quelque sorte informer le jeu en cours que l'actif a changé et doit être rechargé. Cela pourrait être fait avec une file d'attente de messages très simple. Dans un modèle tiré, le jeu vérifie périodiquement tous les éléments du jeu pour voir s'ils ont été modifiés et, le cas échéant, les recharge. Ce serait une solution plus simple, mais moins performante.

Une plus grande préoccupation est de savoir si votre jeu peut gérer de manière gracieuse le rechargement des ressources pendant que l'application est en cours d'exécution. Vous devrez probablement implémenter une sorte de thread d'arrière-plan qui chargera les assets et les "swaps" avec des assets "live" dans le jeu. Votre jeu peut également marquer une pause chaque fois qu'un élément est rechargé. Dans les deux cas, cela pourrait facilement devenir la partie la plus compliquée du processus, selon le fonctionnement actuel de votre pipeline de contenu (vous pouvez déjà avoir un thread de chargement de fond, etc.). :

vous pouvez obtenir le chemin complet vers le dossier de contenu en utilisant cette méthode :)

static public String FullContentDirectory(this ContentManager content) 
{ 
    var appPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); 

    return System.IO.Path.Combine(appPath, content.RootDirectory); 
} 

maintenant, je pense que votre problème suivant peut-être, comment savez-vous l'extension de fichier du nom de l'actif? Ou, et si le nom de l'actif est différent du nom de fichier?

+0

Au moment où je suis abonné à l'événement focusgained pour la fenêtre et ayant simplement les actifs que je veux mettre à jour vérifier leur chemin pour voir si le fichier a été modifié depuis le dernier chargement. La seule difficulté est que je ne peux pas accéder au chemin complet du système pour une ressource donnée dans xna, ce qui rend difficile l'ouverture du flux). – GuyNoir

+0

Comment voulez-vous dire que vous ne pouvez pas accéder au chemin complet du système? Avez-vous une erreur? – MattDavey

+0

XNA stocke et charge le contenu en utilisant des chemins avec uniquement le nom du fichier relatif au répertoire de travail. Cependant, je n'ai pas trouvé un moyen d'accéder à ce chemin de répertoire en utilisant xna 4.0. – GuyNoir

Questions connexes