SDL事件和事件队列

时间:2016-03-10 16:45:03

标签: c++ c sdl-2

我想确保我了解内部如何处理SDL事件,事件类型和事件队列。

“SDL_Event”本质上是一个包含所有事件类型的数据结构的联合。

事件队列是这些事件联合的队列。

  1. 事件联合不包含“类型”成员吗?(例如,对于事件e,我们可以访问e.type以确定事件的类型)
  2. 由于一次只能访问一个联合成员(通过联合的定义),如何访问结构的类型和内容? (例如,如果e.type是SDL_QUIT,则访问SDL_QuitEvent结构)Union如何存储SDL_QuitEvent结构的类型和内容?我错过了什么?

1 个答案:

答案 0 :(得分:4)

它使用了一个技巧,其中SDL_Event联合的所有成员也有一个成员Uint8 type;作为第一个成员,它与Uint8 type;相同。

这是有效的,因为它们之前没有填充,它们都共享相同的字节和相同的地址:

像这样:

typedef struct 
{
    unsigned char type; 
    int other;
} keyboard;

typedef union
{
    unsigned char type;
    keyboard key;
} event;

event e;
assert( &e.type == &e.key.type );