【DXライブラリ】マウス入力を得る

DXライブラリでマウス入力を得る方法について説明しています。とりあえずマウスの座標のところに円を描画する機能を実装します。

マウスで操作できるようにしたい

家庭用ゲーム機ではまずないがPCゲームだとマウスで操作できるゲームがけっこうある。メニュー画面でのカーソル移動とかが主になるが、3Dゲームだとカメラの向きの変更をマウスでできることがある。

DXライブラリでマウスの入力状態を得るには GetMouseInput() を使う。

宣言 int GetMouseInput(void)
概要 マウスのボタンの状態を得る
引数 なし
戻り値 マウスの入力状態値

上の関数だとホイールの回転量は取得できないので GetMouseWheelRotVol() を使う。

宣言 int GetMouseWheelRotVol(void)
概要 マウスホイールの回転量を取得
引数 なし
戻り値 マウスの入力状態

一般的なマウスには左ボタン・右ボタン・ホイール・中央ボタン(ホイール押し込み)の4つの入力があるが、ものによってはマウスの横側にボタンがついているものもある。ここでは前者のマウスの方を想定して実装を進める。

サンプルコード

マウスの入力状態を取得し、マウスの座標に円を描画するサンプルコード。左ボタン・右ボタン・中央ボタン(ホイール押し込み)が押されていれば円の色が変化するようにしている(一応ホイールの回転量も取得している)。

Input.cpp/hに以下のコードを追加していく。

Input.h

//以下のコードを追加
void Input_UpdateMouse();
bool Input_GetMouse(int MouseCode);
void Input_Draw();

Input.cpp

//以下の変数と関数を追加
static int Mouse; //マウスの入力状態を格納する変数
static int Mouse_x, Mouse_y; //マウスの座標
static int Mouse_Wheel; //マウスのホイールの回転量

//マウスの入力状態を更新する
void Input_UpdateMouse() {
    //マウスの入力状態取得
    Mouse = GetMouseInput();

    //マウスのホイールの回転量取得
    Mouse_Wheel = GetMouseWheelRotVol();

    //マウスの座標を取得
    GetMousePoint(&Mouse_x, &Mouse_y);
}

//指定のマウスのボタンが押されているか調べる
bool Input_GetMouse(int MouseCode) {
    switch (MouseCode) {
    case MOUSE_INPUT_LEFT: //マウス左ボタン
        if (Mouse & MOUSE_INPUT_LEFT) return true;
        break;
    case MOUSE_INPUT_RIGHT: //マウス右ボタン
        if (Mouse & MOUSE_INPUT_RIGHT) return true;
        break;
    case MOUSE_INPUT_MIDDLE: //マウス中央ボタン(ホイール押し込み)
        if (Mouse & MOUSE_INPUT_MIDDLE) return true;
        break;
    default:
        break;
    }

    return false;
}

//マウスの座標の位置に図形を表示
void Input_Draw() {
    unsigned int Cr;

    //色の指定
    Cr = GetColor(255, 255, 255);    // 白色

    if (Input_GetMouse(MOUSE_INPUT_LEFT)) {
        Cr = GetColor(255, 0, 0);    // 赤色
    }
    else if (Input_GetMouse(MOUSE_INPUT_RIGHT)) {
        Cr = GetColor(0, 255, 0);    // 緑色
    }
    else if (Input_GetMouse(MOUSE_INPUT_MIDDLE)) {
        Cr = GetColor(0, 0, 255);    // 青色
    }
    

    DrawCircle(Mouse_x, Mouse_y, 8, Cr, TRUE);
}

//次の関数に以下のコードを追加
//全ての入力状態を更新する
void Input_AllUpdate() {
    //略

    //マウス
    Input_UpdateMouse();
}

そして System.cpp に上の Input_Draw() を追加する。

System.cpp

//次の関数に以下のコードを追加
//描画処理
void System_Draw() {
    //略

    Input_Draw();
}

これでマウスカーソルの位置に円が表示される。

ちなみにクリックで選択項目を選ぶようにするにはマウスカーソルが特定の範囲内にある場合にクリックされたかどうかで処理を行う。つまり当たり判定処理が必要になる。

あと環境によってはクリックの取りこぼしや座標ズレなどが生じる可能性がある。その場合は GetMouseInputLog2() を使う。詳しくは公式のリファレンスにて。

コメント

タイトルとURLをコピーしました