SDL中常用的事件类型为键盘和鼠标。
SDL中描述事件的数据结构为SDL_Event,是一个union类型(SDL_events.h/SDL_Event),包含了keyboard,motion(mouse),resize等事件的定义。
typedef union{
Uint8 type;//SDL_EventType
SDL_ActiveEvent active;
SDL_KeyboardEvent key;
SDL_MouseMotionEvent motion;
SDL_MouseButtonEvent button;
SDL_JoyAxisEvent jaxis;
SDL_JoyBallEvent jball;
SDL_JoyHatEvent jhat;
SDL_JoyButtonEvent jbutton;
SDL_ResizeEvent resize;
SDL_ExposeEvent expose;
SDL_QuitEvent quit;
SDL_UserEvent user;
SDL_SysWMEvent syswm;
} SDL_Event;
keyboard事件
该事件数据结构描述如下(SDL_keyboard.h) :
typedef struct{
Uint8 type;//SDL_KEYUP or SDL_KEYDOWN
Uint8 state;//like above
SDL_keysym keysym;//描述按键的数据结构
} SDL_KeyboardEvent;
SDL_keysym定义了描述按键的数据结构(SDL_keysym.h):
typedef struct{
Uint8 scancode;//机器内部使用的按键值
SDLKey sym;//按键值的枚举类型
SDLMod mod;//组合键状态
Uint16 unicode;
} SDL_keysym;
事件轮询可采用SDL_PollEvent()函数,用于查询事件队列中的事件。
使用时一般先根据event.type判断事件类型,如为SDL_KEYDOWN/SDL_KEYUP类型等,然后可进一步获取键值event.key.keysym.sym,可用SDL_GetKeyName(event.key.keysym.sym)获取描述键值的字条串。
example:
int quit = 0;
SDL_Event event;
while(!quit)
{
while (SDL_PollEvent(&event))//轮询事件
{
switch (event.type)//事件类型
{
case SDL_KEYDOWN:
printf("press: %s\n",SDL_GetKeyName(event.key.keysym.sym));
break;
case SDL_KEYUP:
printf("release: %s\n",SDL_GetKeyName(event.key.keysym.sym));
break;
case SDL_QUIT:
quit = 1;
break;
case SDL_MOUSEBUTTONDOWN:
printf("mouse down:(%d,%d)\n",
event.button.x,event.button.y);
break;
case SDL_MOUSEMOTION:
printf("mouse move:(%d,%d) to (%d,%d)\n",
event.motion.xrel,event.motion.yrel,
event.motion.x, event.motion.y);
break;
default:
break;
}
}
}
另外一个事件处理函数为SDL_WaitEvent,区别在于该函数在消息队列中没有消息的情况下会等待,直到有消息为止;而SDL_PollEvent是则不管有没有消息都马上返回。
分享到:
相关推荐
详细地描述了ffmpeg解码技术和SDL的显示技术,以及二者混合编程的方法,对于使用Linux或嵌入式多媒体编程人员有很大的借鉴意义!
扫雷 点一个空的时候把邻近的所有连通的空格全部显出
一个SDL的入门级游戏,包含文档,有声音,图像,代码资源,注释很详尽,代码风格很好
sdl书籍pdf高清文档。超精彩
SDL入门学习资料pdf
sdl编程指南,各种元素显示指南。简单易学。。。。。。
SDL是一个跨平台的多媒体库,它通过OpenGL和2D视频帧缓冲,提供了针对音频、视频、键盘、鼠标、控制杆及3D硬件的低级别的访问接口。它在MPEG播放软件、模拟器以及许多游戏中得到广泛的应用,其中包含了获得大奖的...
SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,适用于 游戏、游戏SDK、演示软件、模拟器、MPEG播放器和其他应用软件。 它被广泛的用于许多著名的游戏。最著名的游戏是赢得LIUNX组游戏开发...
lnux下SDL开发库文件和扩展库一键安装包,该安装包适用于所有LUNX系统下SDL编程开发所需要用到的库文件(我只验证了REDHAT和ubuntu)估计其他的LINUX系统问题不大。 安装说明解压压缩包,运行里面的install程序,...
设计大型通信协议用的开发工具SDL的介绍性书籍,书名为:Systems_Engineering_with_SDL_Developing_Performance_Critical_Communication_Systems.pdf
大家好!最新的VC2005平台下用的SDL库
这个是sdl的net库,用于进行sdl库编程时采用比较简单的网络接口函数,便于进行多平台扩展移植使用。
自己写的图形化的贪吃蛇,有源代码素材,使用的SDL图形化手段,内存已经优化过,运行顺畅;
用SDL实现的三个模块的简单通信,可以让初学者明白SDL编程的思想
文件中 包含 sdl2.dll sdl2_image.dll SDL2_mixer.dll C# sdl2 封装类
包含SDL.H SDL.LIB SDL.DLL等等,是相关编程、开发肯定需要的,包含1.2和2.0的版本
使用sdl2实现对于YUV420P视频进行播放,并且通过SDL2的多线程实现窗口可大可小变化 有利于初学者学习sdl编程
使用SDL2.0实现T9键盘的编程,其中用到SDL_image,SDL_ttf灯扩展库
SDL:Simple DirectMedia Layer是用于游戏或图形图像编程的一个多媒体层,VC6.0版,包含头文件、库文件和帮助文档。