SDL2主游戏循环

Sag*_*Kar 2 c++ rendering sdl sdl-2

在阅读lazyfoo.net上有关SDL2的教程时,我的问题突然出现了,并且代码正在从此页面复制

int main( int argc, char* args[] )
{

//Start up SDL and create window

if( !init() )
{
    printf( "Failed to initialize!\n" );
}
else
{
    //Load media
    if( !loadMedia() )
    {
        printf( "Failed to load media!\n" );
    }
    else
    {
        //Main loop flag
        bool quit = false;

        //Event handler
        SDL_Event e;

        //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;
                }
            }

            //Clear screen
            SDL_RenderClear( gRenderer );

            //Render texture to screen
            SDL_RenderCopy( gRenderer, gTexture, NULL, NULL );

            //Update screen
            SDL_RenderPresent( gRenderer );
        }
    }
}

//Free resources and close SDL
close();

return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这里,为什么我们要在主循环中渲染效果并使其一次又一次地运行而不是像这样:

int main( int argc, char* args[] )
{
//Start up SDL and create window
if( !init() )
{
    printf( "Failed to initialize!\n" );
}
else
{
    //Load media
    if( !loadMedia() )
    {
        printf( "Failed to load media!\n" );
    }
    else
    {
        //Main loop flag
        bool quit = false;

        //Event handler
        SDL_Event e;

       //Clear screen
       SDL_RenderClear( gRenderer );

        //Render texture to screen
        SDL_RenderCopy( gRenderer, gTexture, NULL, NULL );

        //Update screen
        SDL_RenderPresent( gRenderer );

        //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;
                }
            }
        }
    }
}

//Free resources and close SDL
close();

return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想这是有原因的,因为在许多教程中都这样做。但是我无法找到原因。

Jos*_*son 5

您一次又一次渲染屏幕,因为通常在屏幕上表示的事物在变化。要表示这些更改,您需要更新显示。例如,如果一个球在屏幕上移动,而您只渲染一次屏幕,则该球似乎不会移动。但是,如果继续“反复运行”,则可以看到球在屏幕上移动。

  • @Sagar Kar有两种渲染类型,被动渲染和主动渲染。被动渲染仅在需要时渲染屏幕。这种方法通常在带有控件且没有动态动画的窗口式GUI应用程序中使用。在被动渲染中,屏幕仍需要更新自身,而不必像时钟一样。在视频游戏等活动中使用主动渲染来不断更新屏幕。[此处](https://docs.oracle.com/javase/tutorial/extra/fullscreen/rendering.html)是一篇不错的文章,描述了主动渲染和被动渲染之间的区别。 (2认同)