複数のジョイパッドを制御するには?

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");
    ・
    ・
    ・
}

《POINT》

ジョイパッド情報の取得

ジョイパッド情報の取得も、検出した複数のジョイパッドの情報を取得するよう、使用する関数を変える。

//-----------------------------------------------------------------------------
// 関数名 : UpdateFrame()
// 機能概要: ゲームメイン処理
//-----------------------------------------------------------------------------
void UpdateFrame(void)
{
    /* 現在の時間を取得 */
    gl_nowTime = timeGetTime();

    /* キーボードの状態を取得 */
    GetKeyboardState();

    // ジョイパッドの状態を取得
    GetJoypadState2();
    ・
    ・
    ・
}

《POINT》

調べたいボタンが押されているかどうかを調べる

複数のジョイパッド情報を、パッドごとの配列に格納しているので、調べたいボタンが押されているかどうかは次のように判断する。

// 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			// 同時に接続するジョイパッドの最大数をセット

《POINT》


BACK(マウスの状態を取得する)