トップページ > 記事閲覧
シフトキーとテンキーの同時押しが期待通りに機能しない現象について
名前:SmokingWOLF 日時: 2022/04/02 12:30

いつもDXライブラリに大変お世話になっております。 「左シフトキー」と「テンキー」を同時に押したとき、 期待通りに機能しない現象を確認いたしましたのでご報告いたします。 使用したDXライブラリはWindows版の「3.23a」で、 「2022/4/2」にダウンロードさせていただいたバージョンです。 こちらの環境の問題かもしれませんが、よければご確認いただけますと幸いです。 <再現方法> 以下の再現ソースを使い、「左シフト」と「テンキーの1」の同時入力を試したところ、 こちらの環境で以下の現象を確認いたしました。 1.左シフトを押したままテンキー1を押したままにすると、  両方が押されているのにテンキー1が入力状態にならず、左シフトは入力状態と非入力状態が入れ替わる(テンキー1=0/シフト=0〜1)。 2.テンキー1を押したまま → 次に左シフトも押したままにし → 先にテンキー1だけ離して → 左シフトを離すと、  両方が離されているのにテンキー1だけ入ったままの扱いになる(テンキー1=1/シフト=0)。 <再現ソース> #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE) ; // ウィンドウモードに if( DxLib_Init() == -1 ){ return -1;} // DXライブラリ初期化処理 SetDrawScreen( DX_SCREEN_BACK ); char str[256]; // ESCを押すまでループ char key[256]; while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0){ ClearDrawScreen(); GetHitKeyStateAll(key); //キーボード全読み込み sprintf( str , "テンキー1入力状態 %d\n左シフト入力状態 %d", key[KEY_INPUT_NUMPAD1],key[KEY_INPUT_LSHIFT]); DrawString( 30 , 230 , str , GetColor( 255,255,255) ) ;//表示 ScreenFlip(); WaitTimer(16); } DxLib_End() ; // DXライブラリ使用の終了 return 0 ; // ソフトの終了 }
メンテ

Page: 1 |

Re: シフトキーとテンキーの同時押しが期待通りに機能しない現象について ( No.1 )
名前:管理人 日時:2022/04/03 01:55

「左シフトキー」と「テンキー」を同時に押したときの挙動について、手元でも SmokingWOLFさんが遭遇された現象と同じ現象が発生することを確認しました 調べたところ、左シフトキーを押しながらテンキーの1を押した場合は『Endキー』が 押されたことになっていました こちらの現象はキーボードの押下状態の取得に Win32 API を使用しているのが原因なので( Win32 API の キーボード押下状態取得API的にはこの挙動が仕様のようです… )DxLib_Init の前に SetUseDirectInputFlag( TRUE ) ; という記述を追加してキーボードの押下状態の取得に DirectInput を使用するように設定を 変更すると解決することが出来ます よろしければお試しください m(_ _)m ただ、デフォルトで DirectInput を使用しないようにしているのは、何か理由があったからだったと 思いますので( すみません、どのような問題があったのかは失念してしまいました… ) もしかしたら DirectInput を使用するようにすることで別の問題が発生するかもしれません m(_ _;m
メンテ
Re: シフトキーとテンキーの同時押しが期待通りに機能しない現象について ( No.2 )
名前:SmokingWOLF(解決済) 日時:2022/04/03 21:30

詳細なご指南ありがとうございます! おかげさまで、SetUseDirectInputFlagを使って期待通りに動作することを確認できました。 キーボードで8方向移動をするゲームだと、Shiftを押しながら テンキーを使うケースもたびたびあるのでとても助かります。
メンテ

Page: 1 |

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

   クッキー保存