ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

キーボードの入力まとめ

DirectInputを使ってキーボードのキー判定を行う方法のまとめ。


1.DirectInputオブジェクトの作成

#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>

static LPDIRECTINPUT8 s_pDI = NULL;
DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION, 
                    IID_IDirectInput8, (VOID**)&s_pDI, NULL )

2.キーボードデバイス作成

static LPDIRECTINPUTDEVICE8 s_pKeyboard = NULL;
s_pDI->CreateDevice(GUID_SysKeyboard, &s_pKeyboard, NULL);
s_pKeyboard->SetDataFormat(&c_dfDIKeyboard);
s_pKeyboard->SetCooperativeLevel( DXUTGetHWND(), DISCL_NONEXCLUSIVE | DISCL_FOREGROUND );
s_pKeyboard->Acquire();

3.キーボードの情報取得

const int DI_KBSTATE_SIZE = 256;
BYTE keyboardState[DI_KBSTATE_SIZE];
s_pKeyboard->GetDeviceState( DI_KBSTATE_SIZE, keyboardState );

4.キーの判定

if ( (keyboardState[DIK_UP] & 0x80) != 0 )
{
    // カーソルキーの上が押されたときの処理
}

なお上のプログラムではエラーチェックを省略している。実際にはエラーチェックやデバイスがロストしたときなどの処理を書かなくてはならない。