イベント処理

2021年8月13日

SDLでイベントを処理するには、「SDL_PollEvent関数」を使用します。

SDL_PollEvent関数

未処理のイベントをキューから取り出します。

宣言

int SDL_PollEvent( SDL_Event* event );

引数

event取り出したイベントを代入するための変数のアドレスです。

戻り値

キューに未処理のイベントがある場合は「1」を返し、ない場合は「0」を返します。

サンプルプログラム

#include <SDL.h>

int main( int argc, char* argv[] )
{
    if ( SDL_Init( SDL_INIT_VIDEO ) != 0 )
    {
        SDL_Log( u8"SDLの初期化処理に失敗しました。エラーメッセージ: %s", SDL_GetError() );
        return -1;
    }

    auto window = SDL_CreateWindow( 
        u8"サンプル", 
        SDL_WINDOWPOS_CENTERED, 
        SDL_WINDOWPOS_CENTERED, 
        1280, 
        720, 
        0 
    );

    if ( window == nullptr )
    {
        SDL_Log( u8"ウィンドウの作成に失敗しました。エラーメッセージ: %s", SDL_GetError() );
        SDL_Quit();
        return -1;
    }
    
    auto is_finished = false;

    while ( !is_finished )
    {
        auto event_info = SDL_Event();

        while ( SDL_PollEvent( &event_info ) == 1 )
        {
            switch ( event_info.type )
            {
            case SDL_QUIT:
                is_finished = true;
                break;
            
            // ここで他( SDL_QUIT以外 )のイベントを処理
            }
        }
    }
    
    SDL_DestroyWindow( window );
    SDL_Quit();

    return 0;
}

参考ページ