4.图片的使用(重点)
第一步:放图片
先将图片复制粘贴到项目所在的文件夹
第二步:定义图片(IMAGE)
用IMAGE对图片进行定义,例如 IMAGE image
如果图片不止一张,用数组贮存图片,例如IMAGE image[N],N代表图片的数量
第三步:加载图片(loadimage)
IMAGE image;
loadimage(&image,“(定义图片的地址)”),.“./images/2.bmp”(放图片的位置));
注意:如果出现重载中没有一个可以转换参数的类型的报错
有三种解决方法:
第一种(最简单的方法):调成多字节字符集(具体步骤在前面的注意事项中)。
第二种,在loadimage函数中,放图片的位置的参数前面加上个,_T(放图片的位置)。
第三种方法:在放图片位置的参数前面加上个L。
第四步:图片的打印(putimage)
putimage(int x, int y, 定义图片的地址)
(x, y)表示位置
同时loadimage函数的第三个参数和第四个参数,分别表示图片的宽度和高度。
实例:
5.音乐的使用
首先声明一点,这个并不属于easyx库,而是属于windows,所以就需要用头文件,#include<mmsystem.h>(mm- 多媒体的,system系统,多媒体系统),还需要个库文件**#pragma comment(lib, “winmm.lib”) —>windows的多媒体库文件**,同样也需要把音乐,复制粘贴到项目所在的文件夹中
#include<stdio.h> #include<graphics.h> #include<mmsystem.h> // 包含多媒体设备接口文件 #pragma comment(lib, "winmm.lib") int main() { initgraph(460, 460); //第一种 mciSendString("open ./fire/小幸运.mp3", 0, 0, 0); mciSendString("play ./fire/小幸运.mp3", 0, 0, 0); // //第二种方法 alias 取别名 bk //mciSendString("open ./fire/小幸运.mp3 alias bk", 0, 0, 0); 打开音乐 //mciSendString("play bk ", 0, 0, 0); 播放音乐 // mciSendString("close ./fire/小幸运.mp3", 0, 0, 0); 关闭音乐 //如果想程序运行一会儿 自动关闭音乐, //可以使用Sleep函数,然后再关闭音乐的函数,Sleep(3000)表示前面的程序执行3秒,再执行下面的程序 while (1) { ; // 使程序卡住,不闪退,方便看到效果 } return 0; }
其中mciSendString 最后三个参数 分别是 快进 快退,这里播放,就没管,全为0。
6.消息(鼠标 键盘)
首先,我们应该知道,initgraph 创建的窗口的无法直接使用键盘和鼠标操作的,所以接下来我们来学习,怎样输出消息。
消息的定义(ExMessage)
直接使用 ,像这样Exmessage m;来定义一个消息
消息的接受(peekmessage)
peekmessage(参数1, 参数2),peekmessage的参数1为消息的地址,参数2则为接受消息的对象(键盘或者鼠标或者都有),所以peekmessage的参数2有3种,分别是EM_MOUSE(鼠标) , EM_KEY(键盘), EM_MOUSE | EM_KEY(鼠标和键盘)
#include<stdio.h> #include<graphics.h> int main() { ExMessage m; // 定义消息 peekmessage(&m, EM_KEY); //接受消息(键盘) peekmessage(&m, EM_MOUSE); //接受消息(鼠标) peekmessage(&m, EM_KEY | EM_MOUSE);// 接受消息(鼠标和键盘) return 0; }
键盘和鼠标的使用
#include<stdio.h> #include<graphics.h> #include<mmsystem.h> #pragma comment(lib, "winmm.lib") int main() { initgraph(460, 460); ExMessage m; // 定义消息 //peekmessage(&m, EM_KEY); //接受消息(键盘) //peekmessage(&m, EM_MOUSE); //接受消息(鼠标) peekmessage(&m, EM_KEY | EM_MOUSE);// 接受消息(鼠标和键盘) mciSendString("open ./fire/11.mp3", 0, 0, 0); while (1) { if (m.message == WM_LBUTTONDOWN) // 鼠标左键 M_RBUTTONDOWN 鼠标右键 { mciSendString("play ./fire/11.mp3", 0, 0, 0); } if (m.message == WM_KEYDOWN) // 按键 { if (m.vkcode == 'f') // 如果按f 就播放小幸运 { mciSendString("pause ./fire/11.mp3", 0, 0, 0); } } } return 0; }
应用:如何控制游戏里人物的移动
ExMessage msg; peekmessage(&msg, EM_KEY); switch (msg.message) { case WM_KEYDOWN://键盘按下消息 switch (msg.vkcode) { case VK_LEFT://按下左键 break; case VK_RIGHT://按下右键 break; case VK_UP://按下上键 break; case VK_DOWN://按下下键 break; } break; }
其中,例如 case VK_LEFT : 中,可以自行添加事物(人), 移动的距离,以及是否超出游戏边界的判断条件。
源码讲解领取(gitee)
所学有限暂时先介绍到这里,后续可能有补充,如有错误还请指出。