TiledLib for XNA在加载时抛出ArgumentException

时间:2011-05-17 20:48:48

标签: c# .net xna

基本上,我要做的是使用Nick Gravelyn的TiledLib从Tiled地图加载/绘制地图。地图以Tiled的XML格式保存。但是,当我尝试使用行

加载地图时
TiledLib.Map map = Content.Load<TiledLib.Map>("Maps/Map1");

它会抛出一个ArgumentException。整个事情在Tiled本身呈现如下:
enter image description here

地图的XML源看起来像this(由于显而易见的原因,没有直接发布到StackOverflow上。)

它首先工作(使用一个非常简单的地图只使用一个tileset)但是当我编辑它以包含更多的东西时,它突然开始这样做。它可能与我对tile对象的使用有关吗?

编辑:我已经能够解决使用瓷砖对象不是罪魁祸首; this map structure仍然会产生相同的错误。

2 个答案:

答案 0 :(得分:3)

你得到一个异常,因为你没有在地图中命名对象,这将导致TiledLib中的ArgumentException。因此,要解决此问题,您需要返回到Tiled程序,(重新)编辑此地图,并选择地图中的每个对象并为其指定名称(不是属性而是名称),然后再次导出地图并(重新)导入它进入游戏内容。这应该可以解决问题。

BTW:我建议使用常规图层进行碰撞检查而不是对象图层。 像这样:在相同的地图图块尺寸中制作带有透明红色矩形图块的小png文件,向地图添加新图层,将其命名为CollideLayer,并在此CollideLayer中将该红色矩形图块放在要碰撞的位置,然后在游戏代码中,您可以检查CollideLayer单元格是否为空。我发现这更简单。

答案 1 :(得分:-2)

我猜,但是看看你的XML结构,有很多重复的

<tile gid="0"/>
数据元素中的

。官方站点上此文件的结构没有文档或模式定义,并且内容管道源不可用。此外,TileLib的演示附带该部分

<data encoding="base64" compression="gzip">

H4sIAAAAAAAAC2NmYGBgpjKmFkA2jxCNrg + bHD7z0PWSYx428wmZjW4 + qf7Fxyc3PnDFJS3jdzCbx4QFg8QZScTUzmcgDACR4mfdwAMAAA ==   

我不确定您是否可以选择加密加密。但是,“gid”(全局id ??)属性对于定义的每个tile都不能相同,如果它是这样的话。如果我正在编写这个引擎,我可以通过某种方式轻松识别每个基本定义的磁贴。就像数据表上的主键一样。哪个必须是独一无二的。这对我来说就是“gid”属性。

由于异常没有提供任何信息(这是愚蠢的 - 谁部署了像这样的公共库?),参数异常要么是你的“gid”属性值已定义,要么是你缺少加密它在管道导入器或处理器中期望的属性。