前章で、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();
・
・
・
}
g_diKeyStateという配列(グローバル変数)にキーボード上のすべてのキーの情報が格納される。
GetKeyboardState関数を実行すると、キーボードの情報がすべてg_diKeyState配列
に格納されるため、配列を調べれば、調べたいキーが押されているかどうかが分かる。
// カーソルキーの上が押されているかどうかを調べる
if ( g_diKeyState[DIK_LEFT] & 0x80 ) {
// 押されているときの処理
} else {
// 押されていないときの処理
}
DirectInputでは、すべてのキーの情報を取得できる。代表的なものは次のとおり。
| キーコード | 説明 |
|---|---|
| DIK_A 〜 DIK_Z | A〜Zキー |
| DIK_1 〜 DIK_0 | メインキーの数字 (テンキー内の数字ではない) |
| DIK_MINUS | メインキーのマイナス(−)記号 (テンキー内のマイナス記号ではない) |
| DIK_EQUAL | メインキーのイコール(=)記号 (テンキー内のイコール記号ではない) |
| DIK_SPACE | SPACEキー |
| DIK_ESCAPE | ESCAPEキー |
| DIK_TAB | TABキー |
| DIK_BACK | BACK SPACEキー |
| DIK_RETURN | RETURNキー |
| DIK_F1 〜 DIK_F15 | ファンクションキーのF1〜F15 |
| DIK_PRIOR | PAGE UPキー |
| DIK_NEXT | PAGE 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(ジョイパッドの状態を取得する) |