【问题标题】:Monogame C#: Assigning images to a 2D Array?Monogame C#:将图像分配给 2D 数组?
【发布时间】:2019-01-15 01:28:12
【问题描述】:

所以我正在尝试使用 2D 数组创建一个网格,我需要将图像分配给 2D 数组的每个点,但根据我目前拥有的知识找不到方法。创建实际数组没有问题,只需将图像分配给数组即可。

    mark = Content.Load<Texture2D>("mark");
    peep1 = Content.Load<Texture2D>("peep1");
    peep2 = Content.Load<Texture2D>("peep2");
    peep3 = Content.Load<Texture2D>("peep3");


    int[,] grid = new int[6, 6];

    grid[0, 0] = peep1; 

我尝试过以多种方式分配图像,上面显示的是我的第一次尝试,因为它是我保存的。对不起,如果这真的很明显,我还是新手。

【问题讨论】:

    标签: c# arrays multidimensional-array monogame


    【解决方案1】:

    不确定您的确切要求是什么,但您可以这样做:

    mark = Content.Load<Texture2D>("mark");
    peep1 = Content.Load<Texture2D>("peep1");
    peep2 = Content.Load<Texture2D>("peep2");
    peep3 = Content.Load<Texture2D>("peep3");
    
    
    Texture2D[,] grid = new Texture2D[6, 6];
    
    grid[0, 0] = peep1; 
    

    只需将数据类型从 int 更改为 Texture2D,因为无论如何您分配的是 Texture2D 而不是 int。

    【讨论】:

    • 我怎样才能把它画成网格的一部分?抱歉,我真的很难掌握单人游戏的窍门
    • 您可以遍历您的网格并使用SpriteBatch 绘制每个Texture2D。如果您了解面向对象的编程(例如通过类创建模型等),则创建游戏会容易得多。在这里很难将其解释为答案,但您应该研究一下,因为它非常有用。
    【解决方案2】:

    如果我没记错的话,你想要实现的是你想用你定义的数组创建一个地图。如果是这样,这是一种方法: - 首先,创建网格:

    int[,] grid = new int[,]
    {
        //just 2x2 grid, for example
        {0, 1,},
        {1, 2,},
    }
    

    - 接下来,根据您在步骤 1 中创建的网格进行绘制:

    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Begin();
        for (int i = 0; i < grid.GetLength(1); i++)//width
        {
            for (int j = 0; j < grid.GetLength(0); j++)//height
            {
                int textureIndex = grid[j, i];
                if (textureIndex == -1)
                    continue;
    
                Texture2D texture = tileTextures[textureIndex];//list of textures
                spriteBatch.Draw(texture, new Rectangle(
                    i * 60, j * 60, 60, 60), Color.White);
            }
        }
        spriteBatch.End();
    }
    

    【讨论】:

      【解决方案3】:

      如果你真的想在网格中绘制这些,那么你应该调用其中一个 DRAW 方法,并授予它你想要分配纹理的位置.. 您应该创建一个点数组来绘制纹理,并在 darw 方法中使用它。使用矢量或点:(假设它的 60X60 像素)

          markpoint = new Point (0,0);
          peep1pont = new Point (60,0);
          peep2point = new Point (0,60);
          peep3point = new Point (60,60);
      
      for i to numberOfTextures:
      draw(...,...,Texture(the array or grid of textures),Point(the array or grid of points),...,...)
      

      【讨论】:

      • 所以我认为我有这个权利。我像往常一样为每个图像创建一个变量,例如 peep1 和 peep2。然后创建一个点数组并将每个点分配给数组中的一个点?像这样?
      • 是的,没错..这是一个简单的解决方案,可以直接解决您的具体问题。如果您需要更复杂的解决方案,您应该查看Tiles
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 2021-12-25
      • 2013-08-28
      • 2012-11-23
      相关资源
      最近更新 更多