您的位置:首页 > 其它

SDL事件处理框架

2014-11-11 09:19 323 查看
同步事件处理框架:

主循环
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;
             } 
 
        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: