#include <iostream> #include <string> #include <vector> #include<graphics.h> using namespace std; int Screen_width = 1080; int Screen_height = 720; const char* DF_move_r[16] = { "./DF_move_R/%d.png" }; void DF_run_r() { IMAGE DF_move_R[16]; //戴夫的初始坐标和大小 int DF_x = 100; int DF_y = 100; int DF_width = 100; int DF_height = 100; //戴夫奔跑时的速度 int DF_speed = 5; //当前显示的图片编号 int DF_move_r_index = 1; //计算戴夫奔跑时的新坐标 int new_x = DF_x + DF_speed; int new_y = DF_y; //判断新坐标是否超出屏幕范围 if (new_x + DF_width > Screen_width) { new_x = Screen_width - DF_width; } //更新戴夫的坐标 DF_x = new_x; DF_y = new_y; //切换图片 DF_move_r_index = (DF_move_r_index + 1) % 4; //在新坐标处打印戴夫奔跑的图片 loadimage(DF_move_r[DF_move_r_index], DF_x, DF_y, DF_width, DF_height); }报错
时间: 2024-02-05 13:05:17 浏览: 77
使用include <iostream>时一定要加using namespace std
这段代码中有几个问题:
1. 在定义DF_move_r数组时,需要使用%s来表示图片路径中的数字占位符,如下所示:
```
const char* DF_move_r[16] = { "./DF_move_R/%d.png" };
```
2. 在调用loadimage函数时,第一个参数应该是一个指向IMAGE结构体的指针,而不是IMAGE结构体本身。因此,需要将DF_move_r[DF_move_r_index]改为&DF_move_R[DF_move_r_index],如下所示:
```
loadimage(&DF_move_R[DF_move_r_index], DF_move_r[DF_move_r_index], DF_x, DF_y, DF_width, DF_height);
```
3. 在DF_run_r函数中,需要将IMAGE DF_move_R[16]的定义移到函数外部,否则每次调用该函数时都会创建一个新的DF_move_R数组,而无法正确切换图片。
4. 在调用loadimage函数前,需要先清空屏幕,否则会出现图片叠加的情况。
综上所述,修正后的代码如下所示:
```
#include <iostream>
#include <string>
#include <vector>
#include <graphics.h>
using namespace std;
int Screen_width = 1080;
int Screen_height = 720;
const char* DF_move_r[16] = { "./DF_move_R/%d.png" };
IMAGE DF_move_R[16];
int DF_move_r_index = 1;
void DF_run_r() {
//戴夫的初始坐标和大小
int DF_x = 100;
int DF_y = 100;
int DF_width = 100;
int DF_height = 100;
//戴夫奔跑时的速度
int DF_speed = 5;
//计算戴夫奔跑时的新坐标
int new_x = DF_x + DF_speed;
int new_y = DF_y;
//判断新坐标是否超出屏幕范围
if (new_x + DF_width > Screen_width) {
new_x = Screen_width - DF_width;
}
//更新戴夫的坐标
DF_x = new_x;
DF_y = new_y;
//切换图片
DF_move_r_index = (DF_move_r_index + 1) % 4;
//清空屏幕
cleardevice();
//在新坐标处打印戴夫奔跑的图片
loadimage(&DF_move_R[DF_move_r_index], DF_move_r[DF_move_r_index], DF_x, DF_y, DF_width, DF_height);
}
int main() {
initgraph(Screen_width, Screen_height);
//加载所有的图片
for (int i = 0; i < 4; i++) {
char path[50];
sprintf(path, DF_move_r[i], i + 1);
loadimage(&DF_move_R[i], path);
}
while (1) {
DF_run_r(); //打印戴夫奔跑的图片
delay_ms(50); //延时
if (kbhit()) { //判断是否有键盘输入
char ch = getch();
if (ch == 27) { //如果按下ESC键,则退出程序
break;
}
}
}
closegraph();
return 0;
}
```
这个代码会循环播放DF_move_R文件夹下的4张图片,每张图片代表戴夫奔跑时的一个姿势。每次播放完4张图片后,会从头开始再次播放。你可以根据需要修改图片路径和播放速度。
阅读全文