Monogame 扩展平铺

Monogame Extended Tiled

我正在使用 Monogame Extended and Tiled 制作等距城市建设者。我已经设置好所有内容,现在我需要以某种方式访问​​特定的图块,以便在用户单击图块构建对象时在运行时更改它们。问题是,我似乎找不到 "map.GetLayer("Layername").GetTile(x,y) 或 .SetTile(x,y) 函数或类似的函数。

现在我能做的是编辑 xml(.tmx) 文件,其中有一个矩阵代表地图和绘制的图块。这个问题是我需要在编辑后再次在内容管道中构建地图以显示更改。我真的不能在运行时构建还是可以?

提前致谢!

这样的事情会让你分道扬镳。

var tileLayer = map.GetLayer<TiledMapTileLayer>("layername");

TiledMapTile tile;

if(tileLayer.TryGetTile(x, y, out tile))
{
     // do something with tile
}

但是,一旦您从地图上获得了图块,您实际上可以用它做的事情是有限的。

没有 SetTile 方法,因为目前不支持在运行时更改图块数据。这是渲染器的局限性,渲染器已针对渲染超大地图进行了优化,方法是构建一旦加载到显卡中就无法更改的静态几何体。

已经有人讨论过构建另一个渲染器来处理动态地图更改,但在这个阶段,库中还没有实现类似的东西。你总是可以尝试自己实现一个简单的渲染器,一个真正基本的渲染器并不像你想象的那么难。

处理此类问题的另一种方法可能是 pre-process 地图数据,然后再将其提供给渲染器。这个想法是有效地将地图的静态层与动态层分开,并将动态图块渲染为普通精灵。只是一个想法,我不确定这可能如何工作的细节。

我计划最终在 MonoGame.Extended 的下一个主要版本中重新访问 Tiled API。不要屏住呼吸,这些事情可能会花费很多时间,但我正在关注人们在现有 API.

中遇到的反馈和各种问题。

由于地图数据存储在通过内容管道运行的 XML(或 csv)文件中,因此您无法在运行时更改它。

无论如何,在城市建设者中,您通常不会更改现有地块,而是将对象放置在现有地块之上。