IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XNA/Monogame Discussion :

Architecture d'un jeu


Sujet :

XNA/Monogame

  1. #21
    Membre averti Avatar de yodaime
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 282
    Points : 340
    Points
    340
    Par défaut
    Ton fichier LevelReader.cs est bien dans ton projet SharedData ?

  2. #22
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 83
    Points : 76
    Points
    76
    Par défaut
    Oui !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    namespace SharedData
    {
     
        public class LevelReader : ContentTypeReader<TRead>
        {
    Et mon writer est dans mon ContentPipelineExtension. Mais j'ai l'impression qu'aucun des deux n'agit sur la génération du xnb (genre si je remplace des valeurs en dur dans le write et read).
    Pourtant si je les exclus du projet, le xml n'arrive plus à être compiler.

  3. #23
    Membre averti Avatar de yodaime
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 282
    Points : 340
    Points
    340
    Par défaut
    En fait je vois pas trop le problème, tu as Level 1 dans ton fichier xml et tu récupères Level 1 dans ton code. C'est bien ce que tu voulais obtenir non ?

  4. #24
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 83
    Points : 76
    Points
    76
    Par défaut
    Bien sur!

    En fait c'est que du coup je comprend pas à quoi servent le reader et writer. Ce n'est pas leur fonction respective qui sont censé remplir le .xnb?

    Je veux dire, si je commente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    existingInstance.name = input.ReadString();
    pourquoi est-ce que ça me le lit quand même?

  5. #25
    Membre averti Avatar de yodaime
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 282
    Points : 340
    Points
    340
    Par défaut
    J'ai trouvé cet article pour le debug du Content Pipeline :

    http://blogs.msdn.com/b/shawnhar/arc...-pipeline.aspx

  6. #26
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 83
    Points : 76
    Points
    76
    Par défaut
    Voila maintenant ça a l'air de marcher. J'ai un xml que j'arrive à charger via mes différents writer et reader.

    D'un point de vue conception, c'est on ne peut plus simple :

    J'ai une classe Level qui contient une List de Layer (calque) qui contient elle-même une List de Sprite :

    Level 1 <--> * Layer 1 <--> * Sprite

    Voici mon XML (avec juste qques attributs de base) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?xml version="1.0" encoding="utf-8" ?>
    <XnaContent>
      <!-- This is the level content -->
      <Asset Type="DSinsEngine.Level">
        <name>menu</name>
        <!-- This is the list of layer composing the level-->
        <layerList>
          <Item>
            <depth>1</depth>
            <!-- This is the list of sprite composing the layer-->
            <spriteList>
              <Item>
                <path>Sprite\\Menu\\background</path>
              </Item>
            </spriteList>
          </Item>      
          <Item>
            <depth>2</depth>
            <!-- This is the list of sprite composing the layer-->
            <spriteList>
              <Item>
                <path>Sprite\\Menu\\background</path>
              </Item>
            </spriteList>
          </Item>
        </layerList>
      </Asset>
    </XnaContent>
    Pour pouvoir lire une liste dans un ContentReader, il faut que chaque itération de la liste soit entre la balise <Item>. Du coup voila à quoi ressemble mes ContentReader :

    LevelReader
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class LevelReader : ContentTypeReader<TRead>
        {
            protected override TRead Read(ContentReader input, TRead existingInstance)
            {
                TRead level = new TRead();
     
                level.name      = input.ReadString();
                level.layerList = input.ReadObject<List<Layer>>();
     
                return level;
            }
        }
    LayerReader
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class LayerReader : ContentTypeReader<TRead>
        {
            protected override TRead Read(ContentReader input, TRead existingInstance)
            {
                TRead layer = new TRead();
     
                layer.depth         = input.ReadInt32();
                layer.spriteList    = input.ReadObject<List<Sprite>>();
     
                return layer;
            }
        }
    SpriteReader
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class SpriteReader : ContentTypeReader<TRead>
        {
            protected override TRead Read(ContentReader input, TRead existingInstance)
            {
                TRead sprite = new TRead();
     
                sprite.path = input.ReadString();
     
                return existingInstance;
            }
        }
    Si jamais ça peut aider !

Discussions similaires

  1. [Débuter] [P2P] Architecture d'un jeu de plateau
    Par stalker8 dans le forum Réseau
    Réponses: 1
    Dernier message: 21/01/2012, 01h13
  2. [Tutoriel] Bug tuto 'Architecture d'un jeu vidéo 3D'
    Par Oxideur dans le forum Moteurs 3D
    Réponses: 5
    Dernier message: 14/09/2009, 22h16
  3. Question sur "Architecture d'un jeu vidéo 3D par Pierre Schwartz"
    Par TocTocKiéLà? dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 01/09/2009, 22h31
  4. Question sur Architecture d'un jeu vidéo 3D
    Par Polygon dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 28/10/2007, 12h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo