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变量被设置,那么主循环结束,之后的清理环节不再赘述;否则主循环将继续下去,直到有人来点一个×.

posted @ 2020-05-10 14:49  Prisrak  阅读(103)  评论(0编辑  收藏  举报