前面已经学习了键盘事件的简单处理,当然现在就要来学习鼠标事件了,鼠标事件不必键盘难,只是多了移动的操作而已,我们先看一下下面可以简单表示鼠标响应方式的Sprite Sheet:
![SDL学习(七) <wbr>Mouse <wbr>Move(鼠标事件) SDL学习(七) <wbr>Mouse <wbr>Move(鼠标事件)](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
下面的演示程序实现的是在屏幕中设置一个button区域,该区域的显示通过判断鼠标事件(移动/远离/按下/弹起),然后调用上面的sprite sheet中的sprite进行相应,从而实现动态鼠标移动和按键响应的效果,首先是要定义个区域button,鼠标移动到此区域中button就显示mouse over 的图片,反之显示mouse over,如果鼠标左键在该区域中按下就显示mouse down的图片,弹起以后显示mouse up的图片(当然按下就会有弹起了..-_-)
下面是代码:
#include"SDL.h"
#include<string>
//屏幕相关信息定义
const int SCREEN_WIDTH=640;
const int SCREEN_HEIGHT=480;
const int SCREEN_BPP=32;
//定义四种鼠标按键状态
const int CLIP_MOUSEOVER=0;
const int CLIP_MOUSEOUT=1;
const int CLIP_MOUSEDOWN=2;
const int CLIP_MOUSEUP=3;
//定义表面
SDL_Surface *buttonSheet=NULL;
SDL_Surface *screen=NULL;
SDL_Event event;
//定义四个SDL_Rect来容纳四个按键图片的大小和offset
SDL_Rect Clip[4];
//设置各个鼠标事件图片在sprite sheet上面的范围的函数
void set_clips()
{
Clip[CLIP_MOUSEOVER].x=0;
Clip[CLIP_MOUSEOVER].y=0;
Clip[CLIP_MOUSEOVER].w=320;
Clip[CLIP_MOUSEOVER].h=240;
Clip[CLIP_MOUSEOUT].x=320;
Clip[CLIP_MOUSEOUT].y=0;
Clip[CLIP_MOUSEOUT].w=320;
Clip[CLIP_MOUSEOUT].h=240;
Clip[CLIP_MOUSEDOWN].x=0;
Clip[CLIP_MOUSEDOWN].y=240;
Clip[CLIP_MOUSEDOWN].w=320;
Clip[CLIP_MOUSEDOWN].h=240;
Clip[CLIP_MOUSEUP].x=320;
Clip[CLIP_MOUSEUP].y=240;
Clip[CLIP_MOUSEUP].w=320;
Clip[CLIP_MOUS