SDL事件处理框架
SDL
Simple Directmedia Layer
项目地址:https://gitcode.com/gh_mirrors/sd/SDL
免费下载资源
·
同步事件处理框架:
主循环
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 个月前
更多推荐
已为社区贡献3条内容
所有评论(0)