加载2D地图-C#Monogame

加载2D地图-C#Monogame,c#,monogame,C#,Monogame,好了,各位,我有个问题 我正在为我的2D游戏制作一个地图编辑器 基本上我有一个“Slot”对象,它包含一个“Tile”对象(它属于Slot并具有纹理)。我有两种插槽: 类型是笔槽,当您按下它们时,会弹出一个窗体,用于加载 计算机上任何位置的磁贴图像。上次单击的互动程序是活动的 瓷砖 类型是地图平铺。它们是32x32插槽,彼此堆叠,使其看起来像一张地图。当您有一支笔并单击它使其处于活动状态时,您可以绘制一个贴图,然后,它将笔槽纹理复制到贴图纹理 现在我设法将地图保存到一个文本文件中(对于每个磁贴-

好了,各位,我有个问题

我正在为我的2D游戏制作一个地图编辑器

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

  • 类型是笔槽,当您按下它们时,会弹出一个窗体,用于加载 计算机上任何位置的磁贴图像。上次单击的互动程序是活动的 瓷砖

  • 类型是地图平铺。它们是32x32插槽,彼此堆叠,使其看起来像一张地图。当您有一支笔并单击它使其处于活动状态时,您可以绘制一个贴图,然后,它将笔槽纹理复制到贴图纹理

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

    1。我会在游戏中使用这个编辑器,这样我就可以放置我所有的纹理 从地图编辑器项目的某个文件夹中的游戏中,可以看到相同的纹理和相同的名称

    2.

    如果有人能想出另一种方法将纹理加载到贴图槽中,是否有人能给我回电话

    编辑:

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

    天空 天空草天空 土草土

    此外,纹理名称还包括天空、草地和泥土,因此易于存储 加载贴图时,变量/数组中的纹理名称。 但是纹理呢?我该怎么处理这些图像呢


    假设我在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?我想这样做,但似乎更简单,使插槽可以