私は単純なゲームを作成しており、次のコードを使用してカーソル キーを検出します。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (Connection == null || Connection.IsOpen == false)
return true;
Thread.Sleep(SleepTime);
switch (keyData)
{
case Keys.Up:
GoForward();
return true;
case Keys.Right:
GoRight();
return true;
case Keys.Left:
GoLeft();
return true;
case Keys.Down:
GoBackward();
return true;
case Keys.Space:
Beep();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
また、このコードを使用して、ユーザーが以前に押したキーを離したかどうかを判断します。
private void MainForm_KeyUp(object sender, KeyEventArgs e)
{
StopRoomba();
}
現在、2 つの問題があります。ユーザーがたとえば UP カーソルと RIGHT カーソルを同時に押すことができる状況を追加して、キャラクターが右上に移動するようにしたいと考えています。コードでこの状態を確認するにはどうすればよいですか?
また、奇妙なことが起こります(または、デフォルトのシステムかもしれません)。一度に 3 つのカーソル キーを押すことができます。たとえば、UP キーを押しながら RIGHT キーを押しながら、UP キーと RIGHT キーを押しながら DOWN キーを押したままにすると、コードは 3 つのコードすべてに反応します。下の図では、赤い方向が押されており、私のコードによって検出されていることがわかります (赤 = 押された):
私の 2 番目の問題は、 がキー リリースを検出しないMainForm_KeyUp
ことがあり、キャラクターがその方向に進み続けることです。
ヒント/ヘルプは感謝されます