Je construis un jeu en XNA 3 et j'ai les niveaux stockés au format XML. Quelle solution recommanderiez-vous pour désérialiser ces fichiers XML en objets de niveau? il doit être capable de travailler sur la Xbox.XML XNA Désérialisation d'objet
Répondre
Je ne recommande pas (dé) sérialiser les niveaux réels, il suffit de créer une classe de conteneur simple qui contient les informations pour construire un objet de niveau à partir de lui.
quelque chose comme:
[Serializable()]
public class LevelDefinition
{
public Vector3 PlayerStartPosition { get; set; }
public string LevelName { get; set; }
public List<Enemy> Enemies { get; set; }
... etc
}
Cela se traduira par XML agréable, propre.
Ensuite, utilisez la classe XmlSerializer
pour la désérialiser.
Je ne l'ai pas essayé sur le 360 (je parie que ça marchera), mais XmlSerializer est un moyen simple et efficace d'enregistrer/charger vos graphiques d'objets en XML. Fondamentalement, vous prenez votre fichier xml et lancez xsd.exe contre lui. Cela générera un ensemble de classes C# dans lesquelles vous pouvez désérialiser votre XML. Dans votre code, vous allez écrire quelque chose comme:
var serializer = new XmlSerializer(typeof(LevelType));
var level = (LevelType)serializer.Deserialize(streamToYourLevel);
Tout est fait.
Cela pourrait fonctionner. Je vais essayer quand j'ai une chance. Merci! – RCIX
Je ne pense pas que la sérialisation binaire soit disponible pour Zune et XBox mais XmlSerializer fonctionne bien pour moi. Je n'ai aucun problème à sérialiser les collections mais vous devez utiliser l'attribut XmlArrayItem pour les collections non typées comme ArrayList ou transmettre des informations de type additonal au constructeur XmlSerializer mais il est préférable et plus simple d'utiliser List de nos jours. Le dictionnaire ne peut pas être sérialisé mais vous pouvez créer une classe wrapper pour cela. Je stocke généralement un identifiant unique pour chaque élément qui peut ensuite être utilisé comme clé dans le dictionnaire. Ensuite, je peux créer une classe qui enveloppe un dictionnaire mais exposée comme une collection d'éléments.
- 1. Problème de désérialisation XML
- 2. C# problème XML désérialisation
- 3. Echec de la désérialisation XML
- 4. Commande de membre de données et désérialisation XML
- 5. exception inconnue lors de la désérialisation en utilisant XML simples
- 6. Désérialisation de XML vers des objets définis dans plusieurs schémas
- 7. C# désérialisation partielle
- 8. Commandes XNA et GUI (par exemple, xaml et xna)
- 9. problème Désérialisation avec DataContractJsonSerializer
- 10. XNA Graphics Device Extension
- 11. XNA State Game gestion
- 12. XNA Content Pipeline Tutoriel
- 13. Détection de collision XNA
- 14. XNA Unit Testing
- 15. Chargement de fichier XNA
- 16. La désérialisation nécessite un casting?
- 17. Utilisation de system.windows.forms avec XNA
- 18. XNA View Matrix - Recherche d'explication
- 19. Moteur de physique 3D XNA
- 20. comment utiliser EffectPool dans XNA?
- 21. C# Math vs. XNA MathHelper
- 22. XNA sur la carte graphique
- 23. Erreur de désérialisation dans un nouvel environnement
- 24. Ajouter un commentaire XML lors de la sérialisation/désérialisation avec VB.NET
- 25. En désérialisation XML .NET, comment puis-je autoriser l'utilisation polymorphique des types Array?
- 26. Problème avec la désérialisation XML dans les classes générées par XSD
- 27. Il existe un outil qui crée une classe à partir d'un XML pour la désérialisation?
- 28. désérialisation XML avec des préfixes d'espace de noms qui ne sont pas définis
- 29. désérialisation XML avec des types dynamiques/chaîne de conversion à System.Type
- 30. Sérialiser un DrawableGameComponent en XML en utilisant la classe ContentTypeWriter de XNA
Je vais avec ça. Bonne idée! – RCIX
J'ai eu quelques problèmes parfois en sérialisant des choses parfois, particulièrement des collections. Si cela vous arrive, vous pouvez les marquer pour la sérialisation binaire – jasonh