SDL 事件处理
2017-02-06 00:00
183 查看
概论
SDL 的事件处理用 SDL_Init 方法来初始化;参数为int类型的flag,flag可以设置多个:/** @name SDL_INIT Flags * These are the flags which may be passed to SDL_Init() -- you should * specify the subsystems which you will be using in your application. */ /*@{*/ #define SDL_INIT_TIMER 0x00000001 #define SDL_INIT_AUDIO 0x00000010 #define SDL_INIT_VIDEO 0x00000020 #define SDL_INIT_CDROM 0x00000100 #define SDL_INIT_JOYSTICK 0x00000200 #define SDL_INIT_NOPARACHUTE 0x00100000 /**< Don't catch fatal signals */ #define SDL_INIT_EVENTTHREAD 0x01000000 /**< Not supported on all OS's */ #define SDL_INIT_EVERYTHING 0x0000FFFF
flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER; if (SDL_Init (flags)) { av_log(NULL, AV_LOG_FATAL, "Could not initialize SDL - %s\n", SDL_GetError()); av_log(NULL, AV_LOG_FATAL, "(Did you set the DISPLAY variable?)\n"); exit(1); }
SDL对事件的内部实现是,将待操作的事件都放在队列里,使用函数 SDL_PollEvent(), SDL_PeepEvents() 和 SDL_WaitEvent() 你可以观察和处理这些事件。
相关函数
1. int SDL_PushEvent(SDL_Event* event)将一个事件放入队列。成功返回1,发生错误返回0。
2. void SDL_PumpEvents(void)
此函数收集来自输入设备的事件,填入事件循环中,从而更新事件队列。除了调用此方法,不然输入事件没法被填入到队列中。在函数 SDL_PollEvent 和SDL_WaitEvent 中,都调用了该方法。总之,如果你不是“轮询”或者 “等待” 事件(polling or waiting for events),那你一定要调用此函数强制刷新事件队列。
3. int SDL_WaitEvent(SDL_Event* event)
此函数会一直等下去知道获得一个可用的事件。
4. int SDL_PollEvent(SDL_Event* event)
此函数轮询当前的挂起事件,有没有事件都会返回。这是一种比较好的获取系统事件的方式,因为它由主线程调用并返回,而不会因为等待一个事件而阻塞主线程。
5.int SDL_PeepEvents(SDL_Event *events, int numevents,
SDL_eventaction action, Uint32 mask);
此函数检查事件队列,并根据action不同进行不同的操作。
typedef enum { SDL_ADDEVENT, SDL_PEEKEVENT, SDL_GETEVENT } SDL_eventaction;
当 action 为 SDL_ADDEVENT ,函数将会把数量为numevents的事件添加到事件队列的末尾;
当 action 为 SDL_PEEKEVENT,函数将会把事件队列前部、匹配 'mask' 的numevents个事件返回,但不把它们从队列中删除;
当 action 为 SDL_GETEVENT,函数将会把事件队列前部、匹配 'mask' 的numevents个事件返回,并把它们从队列中删除。
相关文章推荐
- SDL学习笔记四(事件处理)
- SDL事件处理框架
- SDL解析——SDL事件处理(1)
- SDL Event Handling 事件处理
- SDL事件处理
- SDL事件处理(一些数据类型)
- SDL2.0的SDL_Event事件处理
- SDL2.0学习笔记——事件处理
- Henry的VB.NET之旅(十五)—动态事件处理方法
- 处理继承的事件
- Adapter模式在J2SE事件处理中的应用
- 评C#事件处理
- .NET Remoting中的事件处理(.NET Framework 2.0)
- Henry的VB.NET之旅(十三)—标准事件处理程序
- Java Swing中的键盘事件处理
- 增加在ClassWizard中没有罗列事件的处理方法
- 捕获(处理)回发事件
- java小程序中鼠标事件的响应处理(包含右键、双击等)
- 深入分析J2ME平台MIDP高级事件处理机制
- 事件处理函数OnEnter OnExit 使用一例