同步事件处理框架:

主循环
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;
             } 
 
        }
 






GitHub 加速计划 / sd / SDL
8.9 K
1.68 K
下载
Simple Directmedia Layer
最近提交(Master分支:3 个月前 )
a57c5669 - 3 个月前
20a6193e - 3 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐