加载2D地图 - C#Monogame

问题描述 投票:0回答:1

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

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

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

  1. 类型为笔槽,当您按下它们并弹出窗体时,您可以使用该窗口为计算机上的任何位置加载图块。最后点击的图块是活动图块。
  2. 类型是地图图块。它们是32x32插槽,彼此相邻堆叠,使其看起来像地图。当你有一支笔并且你点击它以使其活动时,你可以绘制一张地图然后,它将笔槽纹理复制到地图纹理。

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

1.我会将这个编辑器用于我的游戏,所以我可以将游戏中的所有纹理放在Map Editor项目中的某个文件夹中,相同的纹理可以起作用。

2. ????

任何人都可以推荐我,如果他们能想到另一种方式将纹理加载到Map插槽中?

编辑:

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

天空天空天空草天空土草土

纹理名称也是天空,草和泥土,因此在加载地图时,它很容易在变量/数组中存储纹理名称。但纹理怎么样?我该如何处理图像。

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

c# monogame
1个回答
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 ]
      }
   ]
}
© www.soinside.com 2019 - 2024. All rights reserved.