尝试将 +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% 确定这是处理我的瓷砖创作的糟糕方式,我听说可能不得不使用工厂,我查了一下,但我不知道如何将其合并到我的项目中,所以我在这里想知道是否有人知道我可以使用的任何方法。请保持相对简单或尝试解释它是否变得复杂,因为我在编程领域仍然是新手,谢谢!
定义你的类:
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; }
}
然后在加载时(或根据需要)从数据库/配置文件中设置它