DirectX でマウスクリック処理

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
nano

DirectX でマウスクリック処理

#1

投稿記事 by nano » 10年前

DirectXでマウスクリック処理をしているですが、クリック自体は出来るようになったのですが、クリックした瞬間のみ反応いわゆるTriggerができません。
どなたかどうやればいいのか助言をください。

クリック処理のコードはこれです

HRESULT InitMouse(HINSTANCE hInstance,HWND hWnd)
{
if(FAILED(g_pInput->CreateDevice(GUID_SysMouse, &g_pDevMouse, NULL)))
{
return E_FAIL;
}

g_pDevMouse->SetDataFormat(&c_dfDIMouse2); //マウス用のデータ・フォーマット設定
g_pDevMouse->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE|DISCL_FOREGROUND);

DIPROPDWORD diprop;
diprop.diph.dwSize = sizeof(diprop);
diprop.diph.dwHeaderSize = sizeof(diprop.diph);
diprop.diph.dwObj = 0;
diprop.diph.dwHow = DIPH_DEVICE;
diprop.dwData = DIPROPAXISMODE_REL; // 相対値モードで設定(絶対値はDIPROPAXISMODE_ABS)
g_pDevMouse->SetProperty(DIPROP_AXISMODE, &diprop.diph);

g_pDevMouse->Acquire();
return S_OK;
}

/******************************************************************************
* 関数名 : UninitMouse
*
* 引数 : void
* 戻り値 : なし
* 説明 : 終了処理
*******************************************************************************/
void UninitMouse(void)
{

if(g_pDevMouse != NULL)
{
g_pDevMouse -> Unacquire();
g_pDevMouse = NULL;
}
}


/******************************************************************************
* 関数名 : UpdateMouse
*
* 引数 : void
* 戻り値 : なし
* 説明 : 更新処理
*******************************************************************************/
void UpdateMouse(void)
{

dIMouseState.rgbButtons[0] = 0;

g_pDevMouse->GetDeviceState(sizeof(DIMOUSESTATE2), &dIMouseState);


g_pDevMouse -> Acquire();

}

/******************************************************************************
* 関数名 : GetMouse
* 引数 : void
* 戻り値 : なし
* 説明 : 終了処理
*******************************************************************************/
bool GetMouse(int Mouse)
{

return (dIMouseState.rgbButtons[Mouse] & 0x80) ? true : false;

}

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: DirectX でマウスクリック処理

#2

投稿記事 by みけCAT » 10年前

コードはBBcodeを有効にした状態でcodeタグで囲んでいただけると、見やすくてありがたいです。(インデントを消してはいけません)
nano さんが書きました:クリックした瞬間のみ反応いわゆるTriggerができません。
どなたかどうやればいいのか助言をください。
素直にこういう感じの実装ではダメなのですか?
※コンパイル・テストしていないので、間違っているかもしれません
※1フレーム(?)に2回以上呼ぶなど、使い方によってはダメかもしれません

コード:

bool GetMouseTrigger(int Mouse)
{
	/* 前に取得した時のマウスの状態 */
	static bool prevState[sizeof(dIMouseState.rgbButtons) / sizeof(dIMouseState.rgbButtons[0])];
	/* 今のマウスの状態 */
	bool current = GetMouse(Mouse);
	/* 前の状態がfalseで、今の状態がtrueならば、クリックした瞬間と判定する */
	bool ret = current && !prevState[Mouse];
	/* 今の状態を保存する */
	prevState[Mouse] = current;
	/* 判定結果を返す */
	return ret;
}
オフトピック
GetMouse関数の定義の上のコメントが関数名以外実態と合っていないような気がするが、気にしない。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

nano

Re: DirectX でマウスクリック処理

#3

投稿記事 by nano » 10年前

コードの件ご指摘ありがとうございます以後気を付けます。

提案されたコードを追加したところ
うまくTriggerが機能しました!!
ありがとうございました(≧▽≦)

閉鎖

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