ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

ジョイスティックその4

ジョイスティックの状態の調べ方。ジョイスティックイベントで調べる方法もあるけど、今回は手動の方法。
まずは、SDL_JoystickUpdateでジョイスティックの状態を更新。

void SDL_JoystickUpdate(void);

軸の状態を調べるにはSDL_JoystickGetAxis。

Sint16 SDL_JoystickGetAxis(SDL_Joystick *joystick, int axis);

引数axisにはX軸なら0、Y軸なら1を指定する。戻ってくる値はどれだけ軸が倒されているか。0ならば倒されていない状態。
ボタンの状態を調べるにはSDL_JoystickGetButton。

Uint8 SDL_JoystickGetButton(SDL_Joystick *joystick, int button);

引数buttonはどのボタン番号かを指定。ボタンが押されている状態なら1。押されてないなら0を返す。
どんな感じになるか試しにプログラムを書いてみた。

SDL_Joystick* joystick;

joystick = SDL_JoystickOpen(0);

// ゲームのループ
while( loop )
{
    SDL_JoystickUpdate();

    Sint16 x = SDL_JoystickGetAxis(joystick, 0);
    Sint16 y = SDL_JoystickGetAxis(joystick, 1);

    if ( x < -3200 )
    {
        // 左に倒されているときの処理
    }
    else if ( x > 3200 )
    {
        // 右に倒されているときの処理
    }

    if ( y < -3200 )
    {
        // 上に倒されているときの処理
    }
    else if ( y > 3200 )
    {
        // 下に倒されているときの処理
    }
    
    if ( SDL_JoystickGetButton(joystick, 0) )
    {
        // 0番目のボタンが押されているときの処理
    }
}

SDL_JoystickClose(joystick);

軸の判定に使っている3200は軸の小さなブレのための余裕を持つため。
上にあげたプログラムはまだテストしていない。今のPCでジョイスティックが使える状態になってから確認する予定。