【问题标题】:SDL Events and Event QueuesSDL 事件和事件队列
【发布时间】:2016-03-11 23:14:01
【问题描述】:

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

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

而一个事件队列就是这些事件联合的一个队列。

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

【问题讨论】:

    标签: c++ c sdl-2


    【解决方案1】:

    它使用了一个技巧,即 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 );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 2018-09-18
      • 2012-02-10
      相关资源
      最近更新 更多