Невозможно десериализовать содержимое XML в комбинированном проекте XNA-Silverlight WP7 - PullRequest
0 голосов
/ 17 июля 2011

У меня есть совместный проект XNA-Silverlight, который я разрабатываю, и я пытаюсь добавить в него XML-контент.До этого у меня была следующая настройка:

  1. Проект контента * Библиотека игр XNA
  2. - ссылается на проект контента
  3. Проект Silverlight - ссылается на библиотеку игр XNA

У меня были изображения в проекте контента, и я мог прекрасно скомпилировать и загрузить их из кода Silverlight.Сейчас я пытаюсь добавить контент XML в проект контента и код в библиотеку игры, которая его описывает, но я, должно быть, что-то делаю не так, потому что получаю следующую ошибку: Произошла ошибка при десериализации промежуточного XML.Не удается найти тип «CrystalLib.Map»

В проекте содержимого у меня есть папка с именем maps, и под ней у меня есть следующий XML-файл:

<?xml version="1.0" encoding="utf-8"?>
<XnaContent>
  <Asset Type="CrystalLib.Map">
    <TileSetFile>grassland</TileSetFile>
    <Dimensions>500 250</Dimensions>
    <Tiles>
      ... Lots of integers (500 x 250)
    </Tiles>
  </Asset>
</XnaContent>

Затем у меня естьследующий класс в игровом проекте xna (Map.cs):

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;

namespace CrystalLib
{
    /// Represents the data stored in a map file
    class Map
    {
        /// The name of tile set file
        private string tileSetFile;

        /// The name of tile set file
        public string TileSetFile
        {
            get { return tileSetFile; }
            set { tileSetFile = value; }
        }

        /// The dimensions of the map, in tiles.
        private Point dimensions;

        /// The dimensions of the map, in tiles.
        public Point Dimensions
        {
            get { return dimensions; }
            set { dimensions = value; }
        }

        /// Spatial array for the tiles for this map.
        private int[] tiles;

        /// Spatial array for the tiles for this map.
        public int[] Tiles
        {
            get { return tiles; }
            set { tiles = value; }
        }

        /// Retrieves the base layer value for the given map position.
        public int GetTile(int x, int y)
        {
            return tiles[y * dimensions.X + x];
        }

        /// Read a Map object from the content pipeline.
        public class MapReader : ContentTypeReader<Map>
        {
            protected override Map Read(ContentReader input, Map existingInstance)
            {
                Map map = existingInstance;
                if (map == null)
                {
                    map = new Map();
                }

                map.TileSetFile = input.ReadString();
                map.Dimensions = input.ReadObject<Point>();
                map.Tiles = input.ReadObject<int[]>();

                return map;
            }
        }
    }
}

Что еще мне нужно?

Ответы [ 2 ]

3 голосов
/ 17 июля 2011

Когда создается ваше решение, сначала создается ваш контент-проект (до проекта игры xna, который содержит класс Map).При создании контента он пытается ссылаться на класс Map, который еще не был создан, поэтому он не знает об этом.

Класс карты должен идти в отдельном проекте, который строится первым (установите зависимость от проекта игры xna от него).Добавьте этот proj к ссылкам для xna proj и, если необходимо, добавьте несколько операторов using.Вот как это делают все примеры в образовательном разделе app hub.

0 голосов
/ 17 июля 2011

Это всего лишь предположение, но разве ваш класс Map не должен быть публичным? Это внутри вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...