キーボードの入力

2021年8月13日

SDLでキーボードの入力を取得するには、「SDL_GetKeyboardState関数」を使用します。

SDL_GetKeyboardState関数

キーボードの入力状態を取得します。

宣言

const Uint8* SDL_GetKeyboardState( int* numkeys );

引数

numkeysキーの数( 戻り値の配列の長さ )を代入するための変数のアドレスです。
この値が不要な場合には、NULLを指定します。

戻り値

「各キーの入力状態を表す配列のアドレス」を返します。要素の値が「1」の場合はそのキーを押しており、「0」の場合は押していない状態を表します。配列の添え字には、SDL_Scancode型の値を使用できます。

この配列のアドレスは、アプリケーションの実行中は常に有効です。また、配列の要素はイベントを処理する時に更新されるため、この関数( SDL_GetKeyboardState関数 )を何度も呼び出す必要はありません。

サンプルプログラム

#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;
    auto key_count      = 0;
    auto key_state      = SDL_GetKeyboardState( &key_count );

    SDL_Log( u8"キーの数: %d", key_count );

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

        while ( SDL_PollEvent( &event_info ) == 1 )
        {
            if ( event_info.type == SDL_QUIT ) is_finished = true;
        }

        if ( key_state[ SDL_SCANCODE_ESCAPE ] == 1 ) is_finished = true;
    }

    SDL_DestroyWindow( window );
    SDL_Quit();

    return 0;
}

参考ページ