EasyX图形库游戏开发第二天
EasyX图形库游戏开发第二天
今日目标
昨天已经实现了图形主界面,今天要做的是鼠标检测功能和场景切换,让鼠标在点击图片后能触发开始或者退出
鼠标检测
首先要使用ExMessage先定义一个消息结构体
这个结构体用于保存鼠标消息,定义如下(不用再定义):
1 | struct ExMessage |
然后使用peekmessage获取鼠标消息并返回
1 | initgraph(WIDTH,HEIGTH); //创建窗口 1280x720 |
场景切换
需要先定义一个用于切换场景的函数,实现的功能是检测鼠标位置并对鼠标操作做出反馈
所以我先定义一个枚举类型C enum(枚举) | 菜鸟教程
枚举是 C 语言中的一种基本数据类型,用于定义一组具有离散值的常量,它可以让数据更简洁,更易读。枚举类型通常用于为程序中的一组相关的常量取名字,以便于程序的可读性和维护性。
枚举类型是默认第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。
我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。
1 | enum MenuOp |
请注意一定要弄清楚图片在窗口中的逻辑坐标,不然就会像我一样点图片没反应,差点以为写错了if的判断语句
还有一个问题我也没弄懂,我的电脑分辨率是1920x1080,而同学的电脑分辨率是2560x1600,
下面这行代码在我电脑上跑物理窗口大小为1280x720,而在同学电脑上跑则为1920x1080,
但是其实也没啥,因为下面场景切换代码在两边的电脑上都能正确判断,这个我也不是很清楚,但是能跑就行👍🏻
1 | initgraph(WIDTH,HEIGTH); //创建窗口 1280x720 |
我们还需要准备一张图片用于场景切换后的新图片绘制,并在startloadImg()里加上一行
1 | loadimage(&gamebk, _T("image/gamebk.jpg"),1280,720); //后面的是用于图片拉伸覆盖整个窗口 |
下面这块代码是场景切换代码,里面的isInRect(msg,x,y,w,h)这个是用于下一步判断是否鼠标点击图片
学会使用终端,可以在if判断语句内加一句文字输出,看看是否条件是否执行
1 | void startupScene(ExMessage *msg) |
判断是否点击
我们需要判断鼠标是否在图片上并且点击图片,所以我们我们需要检测左键点击(按理来说应该检测左键是否松开,所以我写的是WM_LBUTTONUP,检测左键松开),我选择的是布尔类型bool,C 语言的布尔类型(true 与 false) | 菜鸟教程
这样可以判断鼠标左键的松开是否在图片上,如果是true跳转下一个界面,如果是false就保持当前界面。
1 | bool isInRect(ExMessage *msg, int x, int y, int w, int h) |