0

我在 Ubuntu 12.04 上使用 SDL 1.2 进行编程。SDL 似乎“丢弃”了给事件循环的第一个事件。例如,如果我要通过“x”框检查是否退出游戏,然后在我的应用程序中单击“x”框,则没有任何反应。然而,在第二次点击游戏退出。我的游戏循环:

void game_run()
{
    int RUNNING = 1;

    while(RUNNING == 1)
    {
        while(SDL_PollEvent(&scr.event))
        {
            switch(scr.event.type)
            {
                case SDL_QUIT:
                RUNNING = 0;
                break;

                case SDL_KEYDOWN:
                switch(scr.event.key.keysym.sym)
                {
                    case SDLK_ESCAPE:
                    RUNNING = 0;
                    break;

                    default:
                    break;
                }
                break;

                default:
                break;
            }
        }

        // draw here

        SDL_Flip(scr.buffer);
    }
}

如果需要更多信息,请告诉我!

4

1 回答 1

2

改变你的

case SDL_QUIT:
RUNNING = 0;
break;

case SDL_QUIT:
exit( 0 ) ;
break;

程序应该立即退出,确认事件循环工作正常并且问题出在你的代码中你没有显示的某个地方。我的猜测是game_run()在某个地方再次调用,并且因为int RUNNING = 1;设置在 every 的开头game_run(),所以您进入另一个while(RUNNING == 1)循环。

于 2013-04-12T10:35:57.750 回答