マウスの入力

2021年8月15日

SDLでマウスの入力を取得するには、「SDL_GetMouseState関数」を使用します。

SDL_GetMouseState関数

マウスの入力状態を取得します。

宣言

Uint32 SDL_GetMouseState( int* x, int* y );

引数

xマウス( カーソル )のX座標です。
この値はウィンドウの相対座標になります。
yマウス ( カーソル ) のY座標です。
この値はウィンドウの相対座標になります。

戻り値

「各ボタンに対する入力状態を表すビット列」を返します。この値と以下のビットマスクで論理積を行うことにより、そのボタンが押しているか判別できます。

SDL_BUTTON_LMASK左ボタンの状態を得るためのマスクです。
SDL_BUTTON_MMASK中央ボタンの状態を得るためのマスクです。
SDL_BUTTON_RMASK右ボタンの状態を得るためのマスクです。

サンプルコード

#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 )
        {
            if ( event_info.type == SDL_QUIT ) is_finished = true;
        }

        auto mouse_position_x   = 0;
        auto mouse_position_y   = 0;
        auto mouse_button_state = SDL_GetMouseState( &mouse_position_x, &mouse_position_y );

        if ( mouse_button_state & SDL_BUTTON_LMASK )
        {
            SDL_Log( u8"マウス座標: X = %d, Y = %d", mouse_position_x, mouse_position_y );
        }

        SDL_Delay( 33 );
    }

    SDL_DestroyWindow( window );
    SDL_Quit();

    return 0;
}

参考ページ