【问题标题】:Monogame Extended TiledMonogame 扩展平铺
【发布时间】:2018-04-10 12:33:44
【问题描述】:

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

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

提前致谢!

【问题讨论】:

    标签: set monogame tile tiled


    【解决方案1】:

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

    var tileLayer = map.GetLayer<TiledMapTileLayer>("layername");
    
    TiledMapTile tile;
    
    if(tileLayer.TryGetTile(x, y, out tile))
    {
         // do something with tile
    }
    

    但是,一旦您从地图中获得了该图块,您实际上可以对它进行的操作是有限的。

    没有SetTile 方法这样的东西,因为当前不支持在运行时更改切片数据。这是渲染器的一个限制,它已针对渲染非常大的地图进行了优化,方法是构建静态几何图形,一旦加载到显卡中就无法更改。

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

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

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

    【讨论】:

    • 感谢您的意见。事实上,我编写了一个基本的渲染器,它不使用内容管道,因此能够覆盖现有的 XML 数据,这允许我在运行时使用/修改数据。再次感谢!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      相关资源
      最近更新 更多