SDL事件处理框架

来源:互联网 发布:电脑计时器软件 编辑:程序博客网 时间:2024/06/06 15:40


同步事件处理框架:

主循环int quit = false;while(quit == false){while(SDL_PollEvent(&event)){switch(event.type){case SDL_QUIT:quit = true;break;default:break;}}}


还有两个不常用的事件函数:

SDL_WaitEvent();//必须等到有一个事件才返回,而SDL_PollEvent没有事件也立即返回。

 SDL_PeepEvent();//从队列中获取事件,但事件本身仍然存在于事件队列中。


异步事件 处理框架:

有时比较复杂的游戏的主循环可能用作其它程序,这时用得上事件过滤器,事件过滤器,在有事件发生调用事件处理回调函数。因此称为异步事件处理.
  它调用 void SDL_SetEventFilter(SDL_EventFilter filter);来加入事件过滤回调函数.
  其中.filter是一个函数指针,它有如下类型
<pre name="code" class="cpp">SDL_SetEventFilter(SDL_EventFilter);//1.2版本SDL_SetEventFilter(SDL_EventFilter filter,void *userdata);//2.0版本

SDL按键类型:
type : SDL_KEYDOWN

typedef struct SDL_Keysym
{
    SDL_Scancode scancode;      /**< SDL physical key code - see ::SDL_Scancode for details */
    SDL_Keycode sym;            /**< SDL virtual key code - see ::SDL_Keycode for details */
    Uint16 mod;                 /**< current key modifiers */
    Uint32 unused;
} SDL_Keysym;

keysym有如下定义(只是一部分)
SDLK_LEFTBRACKET    = 91,    SDLK_BACKSLASH        = 92,    SDLK_RIGHTBRACKET    = 93,    SDLK_CARET        = 94,    SDLK_UNDERSCORE        = 95,    SDLK_BACKQUOTE        = 96,    SDLK_a            = 97,    SDLK_b            = 98,    SDLK_c            = 99,    SDLK_d            = 100,    SDLK_e            = 101,    SDLK_f            = 102,

事件循环可以这么写:
int quit = false; while( quit == false )    {Now we start the main loop. This loop will keep going until the user sets quit to true. //While there's an event to handle        while( SDL_PollEvent( &event ) )        {             switch(event.type)             {             case SDL_QUIT:                 quit = true;                  break;             case SDL_KEYDOWN:                 switch( event.key.keysym.sym )                    {                    case SDLK_UP: ; break;                    case SDLK_DOWN: ; break;                    case SDLK_a: ; break;                    case SDLK_RIGHT: ; break;                   }                 break;             default:                 break;             }          } 






0 0
原创粉丝点击