管理人さま
お世話になっています。DXライブラリ、使いやすくいつもお世話になっています。
表題の件ですが、シューティングゲーム作成の過程でバグが発生したのでキーボード入力を確認するために以下のようなコードを毎フレーム実行しました。
char Key[256];
GetHitKeyStateAll(Key);
//結果の出力
std::cout << "UP:" << (Key[KEY_INPUT_UP] ? 1 : 0)
<< ", Down:" << (Key[KEY_INPUT_DOWN] ? 1 : 0)
<< ", Left:" << (Key[KEY_INPUT_LEFT] ? 1 : 0)
<< ", Right:" << (Key[KEY_INPUT_RIGHT] ? 1 : 0)
<< ", Z:" << (Key[KEY_INPUT_Z] ? 1 : 0) << std::endl;
各キー入力が正しく受けられているかを確認したのですが、複数種類の入力があった際に期待する出力が得られませんでした。具体的には、
「Zキーが入力された直後のフレームでは下キーと右キーの同時入力、あるいは下キーと左キーの同時入力が受け付けられていない」
という現象が発生しました。下キーと左右キーの片方だけ正常に出力される場合もありますが、同時に押した際にはどちらの入力も受け付けられていないようです。上キーでは同様の現象は確認されなかったので、下キーと左右キーの組み合わせでバグが起こっているのでは無いかと思います。
以下出力結果を実際の入力ごとに貼っておきます。(本当は毎フレーム出力していますが必要な部分のみ貼ります)
Zキーを押している最中
UP:0, Down:0, Left:0, Right:0, Z:1
その状態のまま追加で下キーと右キーを同時押し
UP:0, Down:1, Left:0, Right:0, Z:1
あるいはUP:0, Down:0, Left:0, Right:1, Z:1
あるいはUP:0, Down:0, Left:0, Right:0, Z:1(キー入力が全くの同時だとこれになる)
ちなみにZキー部分をAキーにしても同様の現象が発生したので、他の文字キーでも発生すると思われます。
また、一連のバグの再現実験の際に、上キーの入力に対しても特定条件下で正常に受け付けられない場合があることが分かりました。具体的には、
「Zキーと下キーが入力された状態(出力も正常)で左右いずれか、もしくは両方の入力が成されている状態(前述のバグにより出力は正常ではない)で上キーの入力をしても入力が受け付けられない」
というものです。入力とそれに対する出力は、
Aキーを押している最中
UP:0, Down:0, Left:0, Right:0, A:1
その状態のまま追加で下キーを押す(Aと下の入力)
UP:0, Down:1, Left:0, Right:0, A:1(ここまで正常)
さらに左右いずれかのキーを押す(Aと下と左右いずれかの入力)
UP:0, Down:1, Left:0, Right:0, A:1(前述のバグ発生)
この状態でさらに上キーを押す(Aと下と左右いずれかと上の入力)
UP:0, Down:1, Left:0, Right:0, A:1(上入力も受け付けられなくなる)
というものです。文字キーが押されていなければ4つの方向全ての入力を同時取得できるのでおそらくバグと思われます。
お忙しい中恐縮ですがご確認いただけますと幸いです。(もし「それ使い方違うよ」というようなことがあればご指摘いただけると幸いです)