キー入力処理について質問です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
donabe
記事: 7
登録日時: 11年前

キー入力処理について質問です

#1

投稿記事 by donabe » 11年前

 初めてここを利用させていただくので色々間違い等あるかもしれませんがよろしくお願いします。
今回はキー入力の処理について質問します。
今自分はポリゴンをキー入力で移動させるにあたってキー入力処理のプログラムを作っています。
とりあえず学校で習った範囲でプログラムを書いてみたのですが入力処理(トリガー、リリース、リピート)の判定のさせ方がよくわかりません。
以下ソースコードです。

コード:

/*****************************************************************************/
/*						インクルードファイル								 */
/*****************************************************************************/
#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;
}
とりあえずここまで書いたのですがトリガー、リリース、リピートの処理の書き方がわからなくて・・・
プログラム初心者なのでこのコードも半分くらいしか理解できてません・・・わかりやすく教えていただけると嬉しいです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: キー入力処理について質問です

#2

投稿記事 by softya(ソフト屋) » 11年前

押された瞬間がトリガーで、離した瞬間がリリース(あるいは離れている間)、押されている間に何フレームか毎にトリガになるのがリピートでしょうか(それとも押されている間ずっとON)?
仕様が明確ではないので、答えるのも難しいです。
DitectXで有ることはコードから読み取れますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

donabe
記事: 7
登録日時: 11年前

Re: キー入力処理について質問です

#3

投稿記事 by donabe » 11年前

 返信ありがとうございます。
押された瞬間がトリガー、離れた瞬間がリリース、押した瞬間に動作してその後ずっと押されていたら押されている間動くのがリピートという感じです。
わかりにくくてすみません・・・

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: キー入力処理について質問です

#4

投稿記事 by softya(ソフト屋) » 11年前

ここのキーボードのキーの処理が参考になると思います。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/02_09.html
リリースはトリガの全く逆の処理を作るだけですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

donabe
記事: 7
登録日時: 11年前

Re: キー入力処理について質問です

#5

投稿記事 by donabe » 11年前

 返信遅れてすみません。 
サイトを参考にどうにか完成させられました。ありがとうございましたm(_)m

閉鎖

“C言語何でも質問掲示板” へ戻る