トップページ > 記事閲覧
GetHitKeyStateAllのバグ報告
名前:kiai 日時: 2014/12/01 21:35

GetHitKeyStateAllを実行した際に返ってくる値で、Enterキーが用意されている定義の値と違うようです。 WaitKeyとCheckHitKeyは大丈夫です。 以下再現コードです。 #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE); if (DxLib_Init() == -1) { return -1; } SetDrawScreen(DX_SCREEN_BACK); char KeyBuf[256]; int ScanCode1 = 0; int ScanCode2 = 0; int ScanCode3 = 0; while (!ProcessMessage()){ ScanCode2 = WaitKey(); GetHitKeyStateAll(KeyBuf); for (int i = 0; i<256; i++){ if (KeyBuf[i] == 1){ ScanCode1 = i; } } ScanCode3 = CheckHitKey(KEY_INPUT_RETURN); //描画 DrawBox(0,0,640,480,GetColor(0,0,0),TRUE); DrawFormatString(0, 0, GetColor(255, 255, 255), "KEY_INPUT_RETURN = %d", KEY_INPUT_RETURN); DrawFormatString(0, 20, GetColor(255, 255, 255), "GetHitKeyStateAll = %d", ScanCode1); DrawFormatString(0, 40, GetColor(255, 255, 255), "WaitKey = %d", ScanCode2); DrawFormatString(0, 60, GetColor(255, 255, 255), "CheckHitKey = %d", ScanCode3); ScreenFlip(); } DxLib_End(); return 0; }
メンテ

Page: 1 |

Re: GetHitKeyStateAllのバグ報告 ( No.1 )
名前:管理人 日時:2014/12/02 01:43

初期設定ではキーボードのキーの押下状態の取得には DirectInput は使用せず、 Win32API の GetKeyboardState を使用してキーの押下状態を取得しているのですが、 この API では Enterキーと、テンキーのEnterキーの区別をすることができないので、 仕方なくどちらかが押されたらどちらも押されたことにしています なので、GetHitKeyStateAll を使用した際に Enterキーが押されていた場合は KeyBuf[ KEY_INPUT_RETURN ] と KeyBuf[ KEY_INPUT_NUMPADENTER ] に 1 が代入されます 載せて頂いたコードでは配列 KeyBuf に複数 1 になっている配列要素があった場合、 一番後に見つかった要素番号が ScanCode1 に代入されるので、KEY_INPUT_RETURN( 28 )より 値の大きい KEY_INPUT_NUMPADENTER( 156 ) の値が ScanCode1 に代入されるというわけです
メンテ
Re: GetHitKeyStateAllのバグ報告 ( No.2 )
名前:kiai(解決) 日時:2014/12/02 11:55

KeyBufの直接の値を確認するのを忘れていました。申し訳ありません。 仕様だったんですね。 SetUseDirectInputFlag(TRUE)を試してみたらこちらは無事にEnterキーを区別して動作したのですが、 今度は右ShiftキーがNULLキーを同時出力していたりとよく分からない現象が起きています。 今回は無難なGetKeyboardStateで使うことにします。 丁寧な解説をありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存