SDL_PeepEvents不会处理窗口关闭

时间:2012-07-22 17:47:06

标签: c++ sdl

我正在调用SDL_PeepEvents( sdlevent, EVENT_BUFFER_SIZE, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_SYSWMEVENT );但是经过几秒的运行时间并且在窗口周围乱码(调整大小/移动/最小化),当单击x关闭窗口时,它不会拾取事件。

void Window::pollWindowEvents(  )
{
    const int EVENT_BUFFER_SIZE = 16;
    SDL_Event sdlevent[ EVENT_BUFFER_SIZE ];    //The SDL event that we will poll to get events.

    SDL_PumpEvents(  );
    int numEvents = SDL_PeepEvents( sdlevent, EVENT_BUFFER_SIZE, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_SYSWMEVENT );

    std::cout << numEvents << std::endl;

    for ( int i = 0; i < numEvents; ++i )
    {
        switch ( sdlevent[ i ].type )
        {
        case SDL_QUIT:
            closed = true;
            std::cout << sdlevent[ i ].type << std::endl;
            break;
        default:
            std::cout << sdlevent[ i ].type << std::endl;
            break;
        };
    }
}

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

调用SDL_PeepEvents()时,我只处理队列中的一系列选定事件,其余事件未经处理。这导致事件队列被这些未处理的事件所饱和,结果停止了我想要处理的事件。通过处理事件队列中的所有事件,可以轻松解决此问题。