`
kevin_hust
  • 浏览: 12298 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

SDL编程四(事件)

阅读更多
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编程

    详细地描述了ffmpeg解码技术和SDL的显示技术,以及二者混合编程的方法,对于使用Linux或嵌入式多媒体编程人员有很大的借鉴意义!

    扫雷 用SDL编程

    扫雷 点一个空的时候把邻近的所有连通的空格全部显出

    SDL alien 入门级SDL编程

    一个SDL的入门级游戏,包含文档,有声音,图像,代码资源,注释很详尽,代码风格很好

    sdl编程书籍

    sdl书籍pdf高清文档。超精彩

    SDL入门学习资料pdf.zip

    SDL入门学习资料pdf

    SDL 编程指南

    sdl编程指南,各种元素显示指南。简单易学。。。。。。

    SDL中文教程 - 游戏编程入门

    SDL是一个跨平台的多媒体库,它通过OpenGL和2D视频帧缓冲,提供了针对音频、视频、键盘、鼠标、控制杆及3D硬件的低级别的访问接口。它在MPEG播放软件、模拟器以及许多游戏中得到广泛的应用,其中包含了获得大奖的...

    SDL入门教程.pdf

    SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,适用于 游戏、游戏SDK、演示软件、模拟器、MPEG播放器和其他应用软件。  它被广泛的用于许多著名的游戏。最著名的游戏是赢得LIUNX组游戏开发...

    lnux下C编程SDL库一键安装包

    lnux下SDL开发库文件和扩展库一键安装包,该安装包适用于所有LUNX系统下SDL编程开发所需要用到的库文件(我只验证了REDHAT和ubuntu)估计其他的LINUX系统问题不大。 安装说明解压压缩包,运行里面的install程序,...

    SDL的经典书籍——协议设计类

    设计大型通信协议用的开发工具SDL的介绍性书籍,书名为:Systems_Engineering_with_SDL_Developing_Performance_Critical_Communication_Systems.pdf

    最新的VC平台的下SDL库

    大家好!最新的VC2005平台下用的SDL库

    SDL_net-1.2.7.rar_SDL_net-1.2.7_SDL_net.dll_sdl_sdl-ne_sdl_net

    这个是sdl的net库,用于进行sdl库编程时采用比较简单的网络接口函数,便于进行多平台扩展移植使用。

    自己写的贪吃蛇用了SDL图形化界面

    自己写的图形化的贪吃蛇,有源代码素材,使用的SDL图形化手段,内存已经优化过,运行顺畅;

    SDL.rar_SDL 通信_sdl

    用SDL实现的三个模块的简单通信,可以让初学者明白SDL编程的思想

    sdl2 C# 封装

    文件中 包含 sdl2.dll sdl2_image.dll SDL2_mixer.dll C# sdl2 封装类

    SDL 头文件和库(v1.2/v2.0)

    包含SDL.H SDL.LIB SDL.DLL等等,是相关编程、开发肯定需要的,包含1.2和2.0的版本

    sdl2-yuv视频播放demo-linux

    使用sdl2实现对于YUV420P视频进行播放,并且通过SDL2的多线程实现窗口可大可小变化 有利于初学者学习sdl编程

    SDL实现9键输入

    使用SDL2.0实现T9键盘的编程,其中用到SDL_image,SDL_ttf灯扩展库

    SDL-devel-1.2.13-VC6.zip_SDL-devel vc_sdl_sdldevel-1.2

    SDL:Simple DirectMedia Layer是用于游戏或图形图像编程的一个多媒体层,VC6.0版,包含头文件、库文件和帮助文档。

Global site tag (gtag.js) - Google Analytics