【C#】【RawInput】複数のキーボードで複数ボタンの同時制御
タイトルの通りです
自作ゲームをマルチプレイに対応させたくて、ここのサンブルからコピーしてきて、
ゲームのキー処理に入れました。
そこで問題発生!!!
今の処理は、長押しすると、一回入力処理がされ、数秒後に自動連打です。
それじゃあダメなので、
前までの処理は、これのWindowsApiを使うというコードでやっていましたが、
(解説みたいなもの。)
KeyDownイベントなどは、まず、OSがアプリにキーを押したよ!って知らせますよね。
OSは、一回入力処理がされ、数秒後に自動連打です。
(KeyUPなどは使わないです)
ですが、これだと、OSからキーを押したよ!という信号を受け取るんではなく、
アプリ側から、OSのキーを押してるか情報を取りに行くので、インターバルを低くしたTimerと、
if([WindowsApiの処理])という形で連打を可能とし、プレイヤーをずっと動かすときに最初から連打になります。
(伝わらなかったらごめんなさい)
RawInputの処理で長押しをすると、KeyDownイベントみたいに、一回入力処理がされ、数秒後に自動連打です。
残念ながら、RawInputは普通だと、できないです。
どうにかしてする方法はありませんか? 教えてください。
どのキーボードがキーを押したとかはRawInputみたいに知りたいです。
該当するソースコード(前までの処理)
C#
1 [DllImport("user32")] static extern short GetAsyncKeyState(Keys vKey); 2 //----- 3 //省略 4 //----- 5 if (GetAsyncKeyState(Keys.Right) < 0) 6 { 7 //ゲームの処理 8 }
該当するソースコード(RawInputの処理)
C#
1 //グローバル変数(風)の宣言 2 const bool CaptureOnlyInForeground = true; 3 private readonly RawInput _rawinput; 4 5 //------------------- 6 //フォームのコントラクタ 7 //------------------- 8 { 9 _rawinput = new RawInput(Handle, CaptureOnlyInForeground); 10 11 _rawinput.AddMessageFilter(); // Adding a message filter will cause keypresses to be handled 12 Win32.DeviceAudit(); // Writes a file DeviceAudit.txt to the current directory 13 14 _rawinput.KeyPressed += KeyPressed; 15 16 } 17//---------------- 18//KeyPressedメソッド 19//---------------- 20 21//** PlayersList1は Dictonary<string,int> で、Keyはデバイス名、VaulesはプレイヤーID(1だったら1P 2だったら2P) 22//というのを事前にAddしてあります。 23 public void KeyPressed(object sender, RawInputEventArg e) 24 { 25 if (PlayersList1[e.KeyPressEvent.DeviceName] == 1) 26 { 27 //1Pがキーを押したときの処理 28 } 29 else //なぜelseで省略しているかというとこのゲームは二人プレイだから1Pじゃなければ2Pしかない!ということです 30 { 31 //2Pがキーを押したときの処理 32 } 33}
サンプルコード
https://www.codeproject.com/Articles/17123/Using-Raw-Input-from-C-to-handle-multiple-keyboard
こちらです
試した内容
- VisualStudioのインテリセンス(?)という機能でキーを話したイベントはないかと探しましたが、
見つからなかった。(イベントはKeyPressedしかなかった) - Googleで調べてみた。
見つからなかった。
ので、こちらに投稿させていただきました。
使用しているツールなど
- IDE:VisualStudio2019
- Framework: .NetFrameworks
- 言語:C#
- 使用OS: Windows10
- アプリの種類:Windows Forms
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/20 11:11
2019/12/20 11:26
2019/12/20 11:29
2019/12/20 12:17
2019/12/20 12:18
2019/12/20 12:24