3

私は呼び出し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;
        };
    }
}

私が間違っていることを誰かが知っていますか?

4

1 に答える 1

1

呼び出しSDL_PeepEvents()時に、キュー内の選択した範囲のイベントのみを処理し、残りのイベントは未処理でした。これにより、イベント キューがこれらの未処理のイベントで飽和状態になり、その結果、処理したいイベントが処理されなくなりました。これは、イベント キュー内のすべてのイベントを処理することで簡単に解決されました。

于 2012-07-28T12:02:06.280 に答える