ジョイスティックの状態の調べ方。ジョイスティックイベントで調べる方法もあるけど、今回は手動の方法。
まずは、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でジョイスティックが使える状態になってから確認する予定。