今回はキー入力の処理について質問します。
今自分はポリゴンをキー入力で移動させるにあたってキー入力処理のプログラムを作っています。
とりあえず学校で習った範囲でプログラムを書いてみたのですが入力処理(トリガー、リリース、リピート)の判定のさせ方がよくわかりません。
以下ソースコードです。
/*****************************************************************************/
/* インクルードファイル */
/*****************************************************************************/
#include"main.h"
#include"polygon.h"
#include"input.h"
/*****************************************************************************/
/* グローバル変数 */
/*****************************************************************************/
LPDIRECTINPUT8 g_pDInput = NULL;
LPDIRECTINPUTDEVICE8 g_pDIDevKeyboard = NULL;
BYTE g_aKeyState[256];
BYTE g_aKeyStateTrigger[256];
BYTE g_aKeyStateRelease[256];
BYTE g_aKeyStateRepeat[256];
int g_aKeyStateRepeatCount[256];
/*****************************************************************************/
/* 初期化処理 */
/*****************************************************************************/
HRESULT InitKeyboard(HINSTANCE hInstance, HWND hWnd)
{
HRESULT hr;
if(g_pDInput == NULL)
{
hr = DirectInput8Create(hInstance, DIRECTINPUT_VERSION,
IID_IDirectInput8, (void**)&g_pDInput, NULL);
if(FAILED(hr))
{
return hr;
}
hr = g_pDInput -> CreateDevice(GUID_SysKeyboard,&g_pDIDevKeyboard,NULL);
if(FAILED(hr))
{
return hr;
}
hr = g_pDIDevKeyboard -> SetDataFormat(&c_dfDIKeyboard);
if(FAILED(hr))
{
return hr;
}
g_pDIDevKeyboard -> Acquire();
return S_OK;
}
}
/*****************************************************************************/
/* 終了処理 */
/*****************************************************************************/
void UninitKeyboard(void)
{
if(g_pDIDevKeyboard != NULL)
{
g_pDIDevKeyboard -> Unacquire();
}
if(g_pDInput != NULL)
{
}
}
/*****************************************************************************/
/* 更新処理 */
/*****************************************************************************/
void UpdateKeyboard(void)
{
BYTE aKeyState[256];
if(SUCCEEDED(g_pDIDevKeyboard -> GetDeviceState(sizeof(aKeyState),&aKeyState[0])))
{
for(int nKey=0; nKey<256; nKey++)
{
g_aKeyStateTrigger[nKey] = //トリガーの処理
g_aKeyStateRelease[nKey] = //リリースの処理
g_aKeyStateRepeat[nKey] = //リピートの処理
g_aKeyState[nKey] = aKeyState[nKey];
}
}
else
{
g_pDIDevKeyboard -> Acquire();
}
}
/*****************************************************************************/
/* キーボードの入力処理 */
/*****************************************************************************/
//キーボードのプレス状態を取得
bool GetKeyboardPress(int nKey)
{
return (g_aKeyState[nKey]&0x80) ? true : false;
}
//キーボードのリピート状態を取得
bool GetKeyboardRepeat(int nKey)
{
return(g_aKeyStateRepeat[nKey]&0x80) ? true : false;
}
プログラム初心者なのでこのコードも半分くらいしか理解できてません・・・わかりやすく教えていただけると嬉しいです。