好的,大家好,我有问题。
我正在制作2D游戏的地图编辑器。
基本上我有一个“Slot”对象,它包含一个“Tile”对象(属于slot并具有纹理)。我有2种类型的插槽:
现在我设法将我的地图保存到文本文件(对于每个图块 - > Path.GetFileNameWithoutExtenson - > save map.txt)。我可以加载一个文本文件来获取保存的名称,但我不知道如何处理纹理,我应该:
1.我会将这个编辑器用于我的游戏,所以我可以将游戏中的所有纹理放在Map Editor项目中的某个文件夹中,相同的纹理可以起作用。
2. ????
任何人都可以推荐我,如果他们能想到另一种方式将纹理加载到Map插槽中?
编辑:
让我说我有一个3 x 3地图和3个纹理作为瓷砖:
天空天空天空草天空土草土
纹理名称也是天空,草和泥土,因此在加载地图时,它很容易在变量/数组中存储纹理名称。但纹理怎么样?我该如何处理图像。
让我说我使用我的地图编辑器进行10种不同的游戏,我将地图保存为带有纹理名称的map.txt文件。我重新启动地图编辑器,我想加载地图,它可以加载给定数据的文本,但是图像怎么样,如何将地图编辑器中的图块传递给游戏
保存信息时,通常最好尽可能地分离数据。这样可以在将来更容易维护,并且整体更清洁。
在你的情况下,我会将每个独特的瓷砖存储在一个数组中,只需让地图跟踪哪些瓷砖去哪里(通过索引进入瓷砖阵列)。这是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 ]
}
]
}