Lazyfoo's SDL_Tutorial 摘要翻译3
LazyFoo's SDL Tutorial 摘要翻译
Tutorial3: Event Driven Programing
原文
说白了就是加上一点事件响应
//Main loop flag
bool quit = false;
//Event handler
SDL_Event e;
这里先声明一个标志变量,还有一个SDL_Event
对象.
这个SDL_Event
对象是一个union类型,用于记录事件的类型.详细内容还需参见SDL文档
//While application is running
while( !quit )
{
这段代码将之前的等待两秒自己关闭改为等待有人点叉叉再关闭.这是一个典型的主循环,大部分游戏都是这个模式.
//Handle events on queue
while( SDL_PollEvent( &e ) != 0 )
{
//User requests quit
if( e.type == SDL_QUIT )
{
quit = true;
}
}
主循环的顶部是事件循环.事件被触发后将会被加入一个事件队列中,然后由这个事件循环来依次处理,直到队列为空.我们通过SDL_PollEvent
函数来获取事件队列中的事件,这些事件按照被触发的时间的顺序储存在队列中,每次PollEvent都会取出队首的那个事件,通过引用的方式传递出来,并将其从队列中删除.(这个是数据结构的基本内容,不会的自行补习)
当队列为空时,SDL_PollEvent
将会返回0,此时事件循环退出.
//Apply the image
SDL_BlitSurface( gXOut, NULL, gScreenSurface, NULL );
//Update the surface
SDL_UpdateWindowSurface( gWindow );
}
事件循环后是渲染环节,和上一节一样将图像渲染到屏幕上.如果事件循环中quit
变量被设置,那么主循环结束,之后的清理环节不再赘述;否则主循环将继续下去,直到有人来点一个×.