Ton fichier LevelReader.cs est bien dans ton projet SharedData ?
Ton fichier LevelReader.cs est bien dans ton projet SharedData ?
Oui !
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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 namespace SharedData { public class LevelReader : ContentTypeReader<TRead> {
Pourtant si je les exclus du projet, le xml n'arrive plus à être compiler.
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 ?
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 commentepourquoi est-ce que ça me le lit quand même?
Code : Sélectionner tout - Visualiser dans une fenêtre à part existingInstance.name = input.ReadString();
J'ai trouvé cet article pour le debug du Content Pipeline :
http://blogs.msdn.com/b/shawnhar/arc...-pipeline.aspx
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) :
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 :
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>
LevelReader
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 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; } }
SpriteReader
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; } }
Si jamais ça peut aider !
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; } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager