尝试将 +50 图像加载到显示它们的对象中,是否有一种简短的方法

本文关键字:是否 方法 一种 对象 图像 加载 显示 | 更新日期: 2023-09-27 18:32:20

简而言之,我有一个由瓷砖组成的网格系统,每个瓷砖都有属性,其中一个是filepath。我想加载 50 个不同的图块,它们都具有不同的属性、文件路径等,例如磁贴 1 是草,所以文件路径是草.png并且是可步行 = true。我现在的做法是

    public string[] Names = new string[50];
    public string[] Filepaths = new string[50];
    public bool[] IsWalkable = new bool[50];
    public Color[] BaseColor = new Color[50];
    public Image[] Images = new Image[50];

然后

        Names[0] = "Grass";
        Filepaths[0] = "img''grass.png";
        IsWalkable[0] = true;
        BaseColor[0] = Color.Empty;
        Images[0] = new Bitmap("img''grass.png");

然后我遍历每个图块并赋予它值

                Tiles[x, y] = new Tile();
                Tiles[x, y].Name = Names[counter];
                Tiles[x, y].Filepath = Filepaths[counter];
                Tiles[x, y].IsWalkable = IsWalkable[counter];
                Tiles[x, y].BaseColor = BaseColor[counter];
                Tiles[x, y].TerrainImage = Images[counter];
                counter++;

我几乎 100% 确定这是处理我的瓷砖创作的糟糕方式,我听说可能不得不使用工厂,我查了一下,但我不知道如何将其合并到我的项目中,所以我在这里想知道是否有人知道我可以使用的任何方法。请保持相对简单或尝试解释它是否变得复杂,因为我在编程领域仍然是新手,谢谢!

尝试将 +50 图像加载到显示它们的对象中,是否有一种简短的方法

定义你的类:

public class ImageInfo
{
    public string Name {get;set;}
    public string Filepath {get;set;}
    public bool IsWalkable {get;set;}
    public Color BaseColor {get;set;}
    public Image Image {get;set;}
}

初始化您的集合(一次):

var collection = new ImageInfo []
{
    new ImageInfo
    {
        Name = "Grass",
        Filepath = "img''grass.png",
        IsWalkable = true,
        BaseColor = Color.Empty,
        Image = new Bitmap("img''grass.png")
    },
    //...
}

声明磁贴:

var tiles = new ImageInfo[10, 10];

循环你的方式:

Tiles[x, y] = collection[counter]; counter++;

也许有一天你会从文件或外部数据源加载数据(而不是硬编码)

你应该把这些信息存储在某个地方,程序没有办法知道草地瓷砖是可以步行的,除非你在某个地方告诉它。

将该信息存储在配置文件(或数据库或 w/e)中将使更新更易于管理,而不是全部在代码中完成。

我会在Tile类中做一些事情

public class Tile {
    public string Name { get; set; }
    public string FilePath { get; set; }
    public bool IsWalkable { get; set; }
    public Color BaseColor { get; set; }
    public Image Image { get; set; }
}

然后在加载时(或根据需要)从数据库/配置文件中设置它