1
int main( int argc, char* args[] )
{
    if( SDL_Init(SDL_INIT_EVERYTHING) < 0 )
        std::cout<<"unable to init sdl";
    SDL_Surface *screen = SDL_SetVideoMode(800,600,32,SDL_DOUBLEBUF);
    std::cout<<"before while\n";
    SDL_Event event;
    while(SDL_PollEvent(&event))
        {
            std::cout<<"in while\n";
            if(event.type == SDL_QUIT)
                std::cout<<"SDL_QUIT\n";
        }
    std::cout<<"after while\n";
    SDL_Quit();
}

由于某些未知原因,此 SDL 应用程序在 while 循环中运行 4 次后退出,而我没有杀死/关闭/等它,也没有将“SDL_QUIT”打印到标准输出。是否有一个原因?我如何解决它?

4

2 回答 2

4

你需要通过为它创建一个主循环来保持你的应用程序活着。到目前为止,您的应用程序在您轮询所有初始事件后退出:

int main( int argc, char* args[] )
{
    if( SDL_Init(SDL_INIT_EVERYTHING) < 0 )
        std::cout<<"unable to init sdl";
    SDL_Surface *screen = SDL_SetVideoMode(800,600,32,SDL_DOUBLEBUF);
    SDL_Event event;
    bool active = true;
    while(active)
    {
        while(SDL_PollEvent(&event))
        {
            if(event.type == SDL_QUIT)
            {
                std::cout<<"SDL_QUIT\n";
                active = false;
            }
        }
        // TODO:  add drawing to screen
        SDL_Flip(screen);
    }
    SDL_Quit();
}
于 2012-07-29T13:51:08.360 回答
4

SDL_PollEvent当没有更多事件要处理时将返回 false,在这种情况下,这是在应用程序启动之后。

您需要将轮询循环嵌套在另一个循环中,以使应用程序保持活动状态:

int running = 1;
while (running)
{
    while (SDL_PollEvent(&event))
    {
        if (event.type == SDL_QUIT)
            running = 0;
    }
    // Update and draw here usually 
}
于 2012-07-29T13:51:50.543 回答