4.图片资源的加载

HJ Lv2

图片资源的加载

首先是loadPicGroup()函数

1
2
3
4
5
6
7
8
9
10
11
12
13
void loadPicGroup() {
loadimage(&picgroup[1], "image/background2.jpg");//加载背景
loadimage(&picgroup[4], "image/button.png");//加载大按钮
loadimage(&picgroup[6], "image/pea.Png");//豌豆子弹
loadimage(&picgroup[9], "image/pause.png");//暂停界面
loadimage(&picgroup[7], "image/exp.png");//爆炸

loadImages("sunflower", "frame_", 17, sunflowerz);
loadImages("peashooter", "frame_", 12, peashooterz);
loadImages("zombie/walk", "frame_", 21, zombiez);
loadImages("zombie/attack", "frame_", 20, attackz);

}

其中loadimage是easyx库的函数,可以从图片文件获取图像。原型如下:

1
2
3
4
5
6
7
void loadimage(
IMAGE* pDstImg, // 保存图像的 IMAGE 对象指针
LPCTSTR pImgFile, // 图片文件名
int nWidth = 0, // 图片的拉伸宽度
int nHeight = 0, // 图片的拉伸高度
bool bResize = false // 是否调整 IMAGE 的大小以适应图片
);

在这里我简要说明一下这个函数:
pDstImg为保存图像的 IMAGE对象指针。如果为 NULL,表示图片将读取至绘图窗口。
pImgFile为图片文件名,这里填写文件的相对路径即可。

nWidth为图片的拉伸宽度。加载图片后,会拉伸至该宽度。默认为 0,表示使用原图的宽度。
nHeight为图片的拉伸高度。加载图片后,会拉伸至该高度。默认为 0,表示使用原图的高度。
bResize是否调整 IMAGE 的大小以适应图片,默认为false。

例如

1
loadimage(&picgroup[1], "image/background2.jpg");

表示将路径为image/background2.jpg的图片加载到picgroup[1]中。


在加载植物僵尸动画的时候,可能会加载很多张文件名类似的图片,这样如果我们一个个的使用 loadimage 函数会使得代码过于冗杂,为简化代码,我自定义了一个函数,用户批量加载图片。

函数解析

下面是我自定义的loadImages函数,这个函数的功能是根据给定的文件夹名称、文件格式和数量,加载特定格式的图像文件到一个 IMAGE 类型的数组中。

1
2
3
4
5
6
7
void loadImages(const char* folder, const char* format, int last, IMAGE* images) {
char path[50];
for (int i = 0; i <= last; i++) {
sprintf(path, "image/%s/%s%d.png", folder, format, i);
loadimage(&images[i], path);
}
}

这段代码的目的是从指定文件夹中加载一系列图像文件,并将它们存储在提供的 IMAGE 类型数组中。下面是对代码每行的解释,以及函数的功能、参数和返回值的意义。

1
void loadImages(const char* folder, const char* format, int last, IMAGE* images) {

这一行定义了一个名为 loadImages 的函数,它没有返回值(void)。这个函数接收四个参数:

  • const char* folder:一个指向字符数组(字符串)的指针,指定了图像文件所在的文件夹名称。
  • const char* format:一个指向字符数组(字符串)的指针,用于指定文件名中除了编号之外的固定格式部分。
  • int last:一个整型变量,指定了需要加载图像的最后一张编号(图片编号从0开始,这个不是图片张数)。
  • IMAGE* images:一个指向 IMAGE 类型数组的指针,用于存储加载的图像数据。
1
char path[50];

这行代码声明了一个名为 path 的字符数组,长度为 50 个字符。它用于存储构建的文件路径字符串。

1
for (int i = 0; i <= last; i++) {

这行代码开始了一个 for 循环,循环变量 i 从 0 开始,直到等于 last。

1
sprintf(path, "image/%s/%s%d.png", folder, format, i);

这行代码使用 sprintf 函数,根据 folder、format 和循环变量 i 的值,格式化生成一个字符串,并将其存储在 path 数组中。字符串格式为 "image/%s/%s%d.png",其中 %s 和 %d 分别是字符串和整数的占位符。

例如:

1
loadImages("zombie/attack", "frame_", 20, attackz);

表示在运行路径存在zombie/attack的文件夹,里面存有连续图片,图片名为frame_xx.png,这里的xx表示从0到20的连续数字,共21张图片,将这些照片加载到attack变量中

此页目录
4.图片资源的加载