加载2D地图-C#Monogame
好了,各位,我有个问题 我正在为我的2D游戏制作一个地图编辑器 基本上我有一个“Slot”对象,它包含一个“Tile”对象(它属于Slot并具有纹理)。我有两种插槽:加载2D地图-C#Monogame,c#,monogame,C#,Monogame,好了,各位,我有个问题 我正在为我的2D游戏制作一个地图编辑器 基本上我有一个“Slot”对象,它包含一个“Tile”对象(它属于Slot并具有纹理)。我有两种插槽: 类型是笔槽,当您按下它们时,会弹出一个窗体,用于加载 计算机上任何位置的磁贴图像。上次单击的互动程序是活动的 瓷砖 类型是地图平铺。它们是32x32插槽,彼此堆叠,使其看起来像一张地图。当您有一支笔并单击它使其处于活动状态时,您可以绘制一个贴图,然后,它将笔槽纹理复制到贴图纹理 现在我设法将地图保存到一个文本文件中(对于每个磁贴-
假设我在10个不同的游戏中使用我的地图编辑器,我将地图保存为带有纹理名称的map.txt文件。我重新启动地图编辑器,我想加载地图,它可以加载给定数据的文本,但是关于图像,我如何将贴图从地图编辑器传递到游戏保存信息时,通常最好尽可能地隔离数据。这使得将来的维护更容易,整体设计更干净 在您的情况下,我会将每个唯一的磁贴存储在一个数组中,只需让地图跟踪哪些磁贴会被放置在哪里(通过磁贴数组中的索引)。这是 实际上如何跟踪光盘上的数据完全取决于您,尽管我建议使用JSON,因为有许多库使解析变得非常简单。尽管您可以使用可序列化对象,甚至可以编写自己的文件格式。有关在C#中读取/写入JSON文件的更多信息,请参阅 作为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 ]
}
]
}
保存信息时,通常最好尽可能多地隔离数据。这使得将来的维护更容易,整体设计更干净 在您的情况下,我会将每个唯一的磁贴存储在一个数组中,只需让地图跟踪哪些磁贴会被放置在哪里(通过磁贴数组中的索引)。这是 实际上如何跟踪光盘上的数据完全取决于您,尽管我建议使用JSON,因为有许多库使解析变得非常简单。尽管您可以使用可序列化对象,甚至可以编写自己的文件格式。有关在C#中读取/写入JSON文件的更多信息,请参阅 作为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 ]
}
]
}
我很难理解你的问题。如果我错了,请纠正我,但您已经创建了一个地图编辑器,允许用户创建自己的瓷砖(有纹理?),并在创建地图时使用这些瓷砖(32x32瓷砖阵列?)-您不确定保存/加载这些自定义贴图/纹理的最佳方式?*这允许用户从计算机中选择一个图像并将其加载到插槽中,并将这些图像用作贴图插槽中的平铺,该插槽是一个具有平铺宽度和八个32x32的阵列。我不确定是否加载平铺纹理,可以获取它们的名称,但不确定是否还应将每个纹理保存在map文件夹中,而map.txt isI仍然不确定您实际询问的内容。您不确定应该如何存储用户选择的平铺纹理?假设用户创建了一个包含五种纹理的地图,你不确定如何存储这些纹理供游戏使用?是的,这就是我要问的我很难理解你的问题。如果我错了,请纠正我,但您已经创建了一个地图编辑器,允许用户创建自己的瓷砖(有纹理?),并在创建地图时使用这些瓷砖(32x32瓷砖阵列?)-您不确定保存/加载这些自定义贴图/纹理的最佳方式?*这允许用户从计算机中选择一个图像并将其加载到插槽中,并将这些图像用作贴图插槽中的平铺,该插槽是一个具有平铺宽度和八个32x32的阵列。我不确定是否加载平铺纹理,可以获取它们的名称,但不确定是否还应将每个纹理保存在map文件夹中,而map.txt isI仍然不确定您实际询问的内容。您不确定应该如何存储用户选择的平铺纹理?假设用户创建了一个包含五种纹理的地图,你不确定如何存储这些纹理供游戏使用?是的,这就是我要问的,但这并不能回答我的问题,我正在尝试将纹理加载为瓷砖。我已经可以保存贴图了,我可以从保存的贴图中加载纹理的名称,然后使用这些数据,但我的问题是图像如何获取这些图像通常2D贴图的纹理被分组在一起并存储在一个称为平铺贴图的文件中。这样做是为了通过减少所需IO操作的数量来增加加载时间,而不是单独加载所有20个平铺纹理,您只需加载一个,然后在内存中“剪切”每个纹理即可。我建议您在地图编辑器中使用类似的方法,而不是在处理用户上传的图像时创建一个平铺地图。然后可以将此tilemap图像与其他地图文件一起存储。您是说Tilesheet?我想这样做,但似乎更简单,使插槽可以