好的,大家好,我有问题。
我正在制作2D游戏的地图编辑器。
基本上我有一个“Slot”对象,它包含一个“Tile”对象(属于slot并具有纹理)。我有2种类型的插槽:
类型为笔槽,当您按下它们并弹出用于加载的窗体时 计算机上任何位置的图块。最后点击的图块是活动的 瓦。
类型是地图图块。它们是32x32插槽,彼此相邻堆叠,使其看起来像地图。如果你有一支钢笔并且点击它以使其活动,你可以绘制地图然后,它将笔槽纹理复制到地图纹理。
现在我设法将地图保存到文本文件(对于每个图块 - > Path.GetFileNameWithoutExtenson - > save map.txt)。我可以加载一个文本文件来获取保存的名称,但我不知道如何处理纹理,我应该:
1。我会在游戏中使用此编辑器,因此我可以放置所有纹理 从地图编辑器项目中某个文件夹内的游戏中,相同的纹理可以起作用。
2。 ????
如果他们能想出另一种将纹理加载到Map插槽中的方式,有人会推荐我吗?
修改
假设我有一个3 x 3地图和3个纹理作为瓷砖:
天空的天空 天空草天空 泥土污垢
纹理名称也是天空,草和泥土,所以它易于存放 加载地图时,变量/数组中的纹理名称。 但纹理怎么样?我该怎么处理这些图片。让我说我使用我的地图编辑器进行10种不同的游戏,我将地图保存为带有纹理名称的map.txt文件。我重新启动地图编辑器,我想加载地图,它可以加载给定数据的文本,但是图像怎么样,如何将地图编辑器中的图块传递给游戏
答案 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 ]
}
]
}