キーボードの状態を取得する

前章で、DirectInputの初期化・開放処理を組み込んだ。ここでは、DirectInputを使ってキーボードの状態を取得する方法を解説する。

キーボードデバイスの設定

キーボードの情報を取得するには、まずキーボードデバイスを設定する必要がある。これは、DirectInputの初期化(WinMain.cpp内)のあとに、次のように指定する。

//-------------------------------------------------------------------------------------------------
//      メイン関数(エントリーポイント)プログラムはここから始まる
//-------------------------------------------------------------------------------------------------
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);
    ・
    ・
    ・
}

キーボード情報の取得

キーボードの情報(押されているか押されていないか)を格納する変数はmyInput.cppでグローバル変数として用意してある。取得したいところでGetKeyboardState()という関数を実行すると、状態を取得し、変数に情報を格納する。

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

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

《POINT》

調べたいキーが押されているかどうかを調べる

GetKeyboardState関数を実行すると、キーボードの情報がすべてg_diKeyState配列に格納されるため、配列を調べれば、調べたいキーが押されているかどうかが分かる。

// カーソルキーの上が押されているかどうかを調べる
if ( g_diKeyState[DIK_LEFT] & 0x80 ) {
    // 押されているときの処理
} else {
    // 押されていないときの処理
}

DirectInputで取得できるキーの種類

DirectInputでは、すべてのキーの情報を取得できる。代表的なものは次のとおり。

キーコード説明
DIK_A 〜 DIK_ZA〜Zキー
DIK_1 〜 DIK_0メインキーの数字
(テンキー内の数字ではない)
DIK_MINUSメインキーのマイナス(−)記号
(テンキー内のマイナス記号ではない)
DIK_EQUALメインキーのイコール(=)記号
(テンキー内のイコール記号ではない)
DIK_SPACESPACEキー
DIK_ESCAPEESCAPEキー
DIK_TABTABキー
DIK_BACKBACK SPACEキー
DIK_RETURNRETURNキー
DIK_F1 〜 DIK_F15ファンクションキーのF1〜F15
DIK_PRIORPAGE UPキー
DIK_NEXTPAGE DOWNキー
DIK_LCONTROL左CTRLキー
DIK_RCONTROL右CTRLキー
DIK_LSHIFT左SHIFTキー
DIK_RSHIFT右SHIFTキー
DIK_LMENU左ALTキー
DIK_RMENU右ALTキー
DIK_UP DIK_DOWN DIK_RIGHT DIK_LEFT↑↓→←キー
DIK_NUMPAD0 〜 DIK_NUMPAD9テンキーの0〜9
DIK_MULTIPLYテンキーの*
DIK_SUBSTRACTテンキーの−
DIK_ADDテンキーの+
DIK_DESIMALテンキーのピリオド(.)
DIK_NUMPADENTERテンキーのEnter
DIK_DEVIDEテンキーのスラッシュ(/)

BACK(NKC_DInput.cppファイルの組み込み) NEXT(ジョイパッドの状態を取得する)