我正在开发一个组合的XNA-Silverlight项目,我正在尝试向其中添加XML内容。在此之前,我进行了以下设置:
我在内容项目中有图像,我可以从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;
}
}
}
}
我还需要什么?
答案 0 :(得分:3)
当您的解决方案构建时,您的内容项目将首先构建(在包含Map类的xna游戏项目之前)。在构建内容时,它试图引用尚未构建的Map类,因此它不了解它。
地图类需要进入一个首先构建的单独项目(将xna游戏项目设置为依赖它)。将该项目添加到xna项目的引用中,并在必要时添加一些using语句。这就是应用程序中心教育部门的所有样本都是这样做的。
答案 1 :(得分:0)
这只是猜测,但你的Map类不需要公开吗?它在您的代码中是内部的。