文档章节

SDL编程四(事件)

来来叔叔
 来来叔叔
发布于 2017/08/04 23:56
字数 374
阅读 5
收藏 0
 

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是则不管有没有消息都马上返回。


© 著作权归作者所有

共有 人打赏支持
来来叔叔
粉丝 0
博文 100
码字总数 55732
作品 0
广州
高级程序员
SDL系列讲解(十一) SDL_QUIT流程

明天会将自己的很早的一部小说发出,一次发出写的所有的六章,如果时间,或者某天突然觉得可以续写了,那么就是它又一次起航了。 工作期间,码了一个记录工作的小说,有兴趣的可以阅读。当然...

代码GG陆晓明
2017/10/28
0
0
SDL系列讲解(十) 按键处理流程

SDL系列讲解(一) 简介 SDL系列讲解(二) 环境搭建 SDL系列讲解(三) 工具安装 SDL是什么,能干什么,为什么我们要学习它? SDL系列讲解(四) demo讲解 SDL系列讲解(五) 调试c代码 SD...

代码GG陆晓明
2017/10/28
0
0
SDL+Rose:让跨平台编程返璞归真

十多年前,只要学会C/C++,基本就能写所有平台程序。十多年后的今天,说要用C/C++写各平台程序,不少人会认为不可能,原因很多,像平台原生语言就不是C/C++,程序要求部署灵活。——但是,程...

rose-sdk
2015/07/06
799
1
6 个免费的 C++ 图形和游戏开发包

今天我们将分享一些 C++ 在图形和游戏开发方面的库,相信这些库可以帮到开发者节省开发的时间。 1) Antigrain AGG,全名:Anti-Grain Geometry,是一个开源的、高效的2D图形库。AGG的功能与G...

oschina
2012/06/13
6.8K
11
使用SDL动态显示鼠标的位置信息(四)

博主这两天看动漫看晕了,有点懈怠啊...嘿嘿,动漫的名字叫做《我的妹妹不可能那么可爱》,二季看完之后我突然觉得我有个妹妹该多好啊,嘿嘿... 不过更为恼火的是,博主搭建了SDL2.0的环境,...

夲仒無道
2013/10/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
14
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
1
0
Coding and Paper Letter(四十)

资源整理。 1 Coding: 1.Tomislav Hengl撰写的非官方作者指南:Michael Gould•Wouter Gerritsma。 UnofficialGuide4Authors 2.R语言包rwrfhydro,社区贡献的工具箱,用于管理,分析和可视化...

胖胖雕
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部