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;
}
DirectX でマウスクリック処理
Re: DirectX でマウスクリック処理
コードはBBcodeを有効にした状態でcodeタグで囲んでいただけると、見やすくてありがたいです。(インデントを消してはいけません)
※コンパイル・テストしていないので、間違っているかもしれません
※1フレーム(?)に2回以上呼ぶなど、使い方によってはダメかもしれません
素直にこういう感じの実装ではダメなのですか?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 でマウスクリック処理
コードの件ご指摘ありがとうございます以後気を付けます。
提案されたコードを追加したところ
うまくTriggerが機能しました!!
ありがとうございました(≧▽≦)
提案されたコードを追加したところ
うまくTriggerが機能しました!!
ありがとうございました(≧▽≦)