【C++】 DirectX初心者質問スレ Part20 【C】
■ このスレッドは過去ログ倉庫に格納されています
0752デフォルトの名無しさん
2008/12/26(金) 00:59:36キーステート取得部分はコードは以下のような感じです。_TRACE_()はデバッグ用メッセージ出力です。
--------------------------------------------
LPDIRECTINPUTDEVICE8 GgafDx9Input::_s_pIDirectInputDevice8_Keyboard;
char GgafDx9Input::_s_caKeyboardState[256];
void GgafDx9Input::updateKeyboardState() {
again:
HRESULT hr = _s_pIDirectInputDevice8_Keyboard->GetDeviceState(sizeof(_s_caKeyboardState), (void*)&_s_caKeyboardState);
if(FAILED(hr)){
_TRACE_("GetDeviceState is FAILED");
hr = _s_pIDirectInputDevice8_Keyboard->Acquire();
if(hr == DI_OK) {
goto again;
} else {
//ダメならまた次回へ
}
}
return;
}
-----------------------------------------
ここで、例えば"z"キーを押しっぱなしにしたとして、60FPSの頻度で updateKeyboardState()を実行し
if (_s_caKeyboardState[DIK_Z] & 0x80)
で押されているか調べるのですが、本当にごく稀に上記条件が真にならないことがあるのです。
しかもその現象が起こったとき、デバッグメッセージが一つも表示されていないので、どうやら GetDeviceState は成功しているようなのです。
押しっぱなしが重要なアプリでなんとか解決したいのですが、どこがまずいのかわかりません。ご教授をお願いいたします。
または、同じようなことで悩んでいる方おられませんか? 代替案などもあれば知りたいです。
■ このスレッドは過去ログ倉庫に格納されています