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 回実行した後、強制終了/終了/etc せず、「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 に答える