文档章节

SDL编程四(事件)

来来叔叔
 来来叔叔
发布于 2017/08/04 23:56
字数 374
阅读 3
收藏 0
点赞 0
评论 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

SDL系列讲解(十) 按键处理流程

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

代码GG陆晓明 ⋅ 2017/10/28 ⋅ 0

SDL+Rose:让跨平台编程返璞归真

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

rose-sdk ⋅ 2015/07/06 ⋅ 1

6 个免费的 C++ 图形和游戏开发包

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

oschina ⋅ 2012/06/13 ⋅ 11

使用SDL动态显示鼠标的位置信息(四)

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

夲仒無道 ⋅ 2013/10/04 ⋅ 0

使用SDL记录键盘信息(一)

SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。 为了熟悉SDL , 最近在写一些小的Demo , SDL的事件功能只是它的功能之一,而键盘事件是属于事件功能...

夲仒無道 ⋅ 2013/10/01 ⋅ 0

SDL_Engine游戏引擎制作 3-Window 游戏窗口

SDL编写程序的第一步先是初始化SDL,然后就是创建窗口。然后就是创建基于本窗口的渲染器(Renderer 姑且称为渲染器吧)。SDL中的窗口为SDL_Window,是一个结构体,与之对应的有各种与窗口处理相...

bull521 ⋅ 03/27 ⋅ 0

3.SDL游戏开发:把代码写长一点(二)

看问题想本质,读USB驱动源码时,要读至threadrun才到精彩处,那么对于上层的应用来说,那种至高境界估计是到不了,但是还是接着把代码上面代码理解下,从整个代码来看,里面增加的SDL函数就...

一一无念 ⋅ 2012/11/05 ⋅ 1

8.SDL游戏开发:事件(二)

没上班日子无聊,没得上班又没钱的日子便是痛苦,在上海又换了个地,生活不容易,新地方还不错,上网用无线,下午准备接着写SDL系列,没想到的是B450上fedora12 无线网卡驱动没整上,然后我在...

一一无念 ⋅ 2012/11/08 ⋅ 0

「SDL第八篇」支持倍速与慢放的YUV视频播放器

前言 今天向大家介绍一下如何通过 SDL 实现一个YUV视频播放器。它与上次介绍的音频播放器一样,也是一个简单的不能再简单的播放器了。只不过一个是播放的音频PCM数据,另一个播放的时视频YUV...

音视频直播技术专家 ⋅ 04/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

磁盘管理—逻辑卷lvm

4.10-4.12 lvm 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化、挂载-->扩容。 磁盘分区 注: 创建分区时需要更改其文件类型为lvm(代码8e) 分区 3 已设置为 Linu...

弓正 ⋅ 14分钟前 ⋅ 0

Spring源码解析(六)——实例创建(上)

前言 经过前期所有的准备工作,Spring已经获取到需要创建实例的 beanName 和对应创建所需要信息 BeanDefinition,接下来就是实例创建的过程,由于该过程涉及到大量源码,所以将分为多个章节进...

MarvelCode ⋅ 34分钟前 ⋅ 0

a href="#"

<a href="#">是链接到本页,因为你有的时候需要有个链接的样式,但是又不希望他跳转,这样写,你可以把这个页面去试试

颖伙虫 ⋅ 41分钟前 ⋅ 0

js模拟栈和队列

栈和队列 栈:LIFO(先进后出)一种数据结构 队列:LILO(先进先出)一种数据结构 使用的js方法 1.push();可以接收任意数量的参数,把它们逐个推进队尾(数组末尾),并返回修改后的数组长度。 2....

LIAOJIN1 ⋅ 41分钟前 ⋅ 0

180619-Yaml文件语法及读写小结

Yaml文件小结 Yaml文件有自己独立的语法,常用作配置文件使用,相比较于xml和json而言,减少很多不必要的标签或者括号,阅读也更加清晰简单;本篇主要介绍下YAML文件的基本语法,以及如何在J...

小灰灰Blog ⋅ 49分钟前 ⋅ 0

IEC60870-5-104规约传送原因

1:周期循环2:背景扫描3:自发4:初始化5:请求6:激活7:激活确认8:停止激活9:停止激活确认10:激活结束11:远程命令引起的返送信息12:当地命令引起的返送信息13:文件传送20:响应总召...

始终初心 ⋅ 今天 ⋅ 0

【图文经典版】冒泡排序

1、可视化排序过程 对{ 6, 5, 3, 1, 8, 7, 2, 4 }进行冒泡排序的可视化动态过程如下 2、代码实现    public void contextLoads() {// 冒泡排序int[] a = { 6, 5, 3, 1, 8, 7, 2, ...

pocher ⋅ 今天 ⋅ 0

ORA-12537 TNS-12560 TNS-00530 ora-609解决

oracle 11g不能连接,卡住,ORA-12537 TNS-12560 TNS-00530 TNS-12502 tns-12505 ora-609 Windows Error: 54: Unknown error 解决方案。 今天折腾了一下午,为了查这个问题。。找了N多方案,...

lanybass ⋅ 今天 ⋅ 0

IDEA反向映射Mybatis

1.首先在pom文件的plugins中添加maven对mybatis-generator插件的支持 ` <!-- mybatis逆向工程 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-ma......

lichengyou20 ⋅ 今天 ⋅ 0

4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例

准备磁盘分区 fdisk /dev/sdb n 创建三个新分区,分别1G t 改变分区类型为8e 准备物理卷 pvcreate /dev/sdb1 pvcreate /dev/sdb2 pvcreate /dev/sdb3 pvdisplay/pvs 列出当前的物理卷 pvremo...

Linux_老吴 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部