NKC_DInput.cppには、複数のジョイパッドを検出してコントロールする仕組みを用意してある。ここでは、1つのジョイパッドを使っているプログラムを修正して、複数のジョイパッドに対応させる方法を紹介する。
なお、このプログラムは、ジョイパッドを最大4つまで検出できる。数を増やすことも容易にできる。
ジョイパッドの初期化を、複数のパッドの初期化が行える関数に変更する。
//-------------------------------------------------------------------------------------------------
// メイン関数(エントリーポイント)プログラムはここから始まる
//-------------------------------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode)
{
・
・
・
// DirectInputオブジェクトの初期化
if ( FAILED(InitDInput(hThisInst)) ) return (FALSE);
// Keyboard Object の初期化
if ( FAILED(InitKeyboard()) ) return (FALSE);
// Joypad Object の初期化
if ( FAILED(InitJoypad2()) ) OutputDebugString("Joypad Not Found\n");
・
・
・
}
ジョイパッド情報の取得も、検出した複数のジョイパッドの情報を取得するよう、使用する関数を変える。
//-----------------------------------------------------------------------------
// 関数名 : UpdateFrame()
// 機能概要: ゲームメイン処理
//-----------------------------------------------------------------------------
void UpdateFrame(void)
{
/* 現在の時間を取得 */
gl_nowTime = timeGetTime();
/* キーボードの状態を取得 */
GetKeyboardState();
// ジョイパッドの状態を取得
GetJoypadState2();
・
・
・
}
複数のジョイパッド情報を、パッドごとの配列に格納しているので、調べたいボタンが押されているかどうかは次のように判断する。
// 1つ目のジョイパッドの左が押されているかどうかを調べる
if ( g_diJoyState2[0] & BUTTON_LEFT ) {
// 押されているときの処理
} else {
// 押されていないときの処理
}
初期状態では、最大4つまでのジョイパッドを制御できるようになっている。さらに数を増やしたい場合は、NKC_DInput.h内のdefine文を修正すればよい。
//-----------------------------------------------------------------------------
// File: NKC_DInput.h
// Desc: NKC_DInput.cppで使用するもののうち、他のソースでも使うものを宣言
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// マクロ
//-----------------------------------------------------------------------------
/* Joypad情報 */
・
・
・
#define JOYPADMAX 4 // 同時に接続するジョイパッドの最大数をセット
| BACK(マウスの状態を取得する) |