加载2D地图 - C#Monogame

时间:2017-12-15 14:13:55

标签: c# monogame

好的,大家好,我有问题。

我正在制作2D游戏的地图编辑器。

基本上我有一个“Slot”对象,它包含一个“Tile”对象(属于slot并具有纹理)。我有2种类型的插槽:

  1. 类型为笔槽,当您按下它们并弹出用于加载的窗体时 计算机上任何位置的图块。最后点击的图块是活动的 瓦。

  2. 类型是地图图块。它们是32x32插槽,彼此相邻堆叠,使其看起来像地图。如果你有一支钢笔并且点击它以使其活动,你可以绘制地图然后,它将笔槽纹理复制到地图纹理。

  3. 现在我设法将地图保存到文本文件(对于每个图块 - > Path.GetFileNameWithoutExtenson - > save map.txt)。我可以加载一个文本文件来获取保存的名称,但我不知道如何处理纹理,我应该:

    1。我会在游戏中使用此编辑器,因此我可以放置所有纹理 从地图编辑器项目中某个文件夹内的游戏中,相同的纹理可以起作用。

    2。 ????

    如果他们能想出另一种将纹理加载到Map插槽中的方式,有人会推荐我吗?

    修改

    假设我有一个3 x 3地图和3个纹理作为瓷砖:

    天空的天空 天空草天空 泥土污垢

    纹理名称也是天空,草和泥土,所以它易于存放 加载地图时,变量/数组中的纹理名称。 但纹理怎么样?我该怎么处理这些图片。

    让我说我使用我的地图编辑器进行10种不同的游戏,我将地图保存为带有纹理名称的map.txt文件。我重新启动地图编辑器,我想加载地图,它可以加载给定数据的文本,但是图像怎么样,如何将地图编辑器中的图块传递给游戏

1 个答案:

答案 0 :(得分:3)

在保存信息时,通常最好尽可能地隔离数据。这样可以在将来更容易维护,并且整体更清洁。

在你的情况下,我会将每个独特的图块存储在一个数组中,然后让地图跟踪哪些图块去哪里(通过索引到图块数组中)。这是the most common way tile maps are implemented in games

你如何实际跟踪光盘上的数据完全取决于你,虽然我会推荐JSON,因为有很多库可以很容易地解析它。虽然您可以使用可序列化对象,甚至可以编写自己的文件格式。有关使用C#读取/写入JSON文件的更多信息,请参阅this post

作为JSON存储到光盘的测试图的示例如下所示:

{  
   "tiles": [  
      {  
         "id": 1,
         "hasCollision": false,
         "texture": "DirtPath.png"
      },
      {  
         "id": 2,
         "hasCollision": true,
         "texture": "DeadTreeStump.png"
      }
   ],
   "maps": [  
      {  
         "id": 1,
         "name": "Test Map",
         "tiles": [  
            0, 0, 0, 0, 0,
            0, 1, 1, 1, 0,
            0, 1, 2, 1, 0,
            0, 1, 1, 1, 0,
            0, 0, 0, 0, 0 ]
      }
   ]
}