Windows フォーム アプリケーションを使用して独自のゲームをコーディングしています。マルチプレイヤーゲームになるはずです。各プレーヤーはブロックを操作してボールをピッチ内に保つことができますが、問題は両方のプレーヤーが同時にコントロールを押すことができないことです。最初のプレーヤーの移動中に 2 番目のプレーヤーがキーを押すたびに、最初のプレーヤーのブロックが停止します。しかし、キーを同時に押すと、両方のブロックが動きます。KeyDownイベントを使用しました。
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.W && one.BrickLocationY > 0)
{
one.BrickLocationY -= 17;
}
if (e.KeyCode == Keys.S && one.BrickLocationY + Brick.BrickHeight < screenHeight)
{
one.BrickLocationY += 17;
}
if (e.KeyCode == Keys.Up)
{
two.BrickLocationY -= 17;
}
if (e.KeyCode == Keys.Down && two.BrickLocationY + Brick.BrickHeight < screenHeight)
{
two.BrickLocationY += 17;
}
if (e.KeyCode == Keys.Escape)
{
Application.Exit();
}
}
わかりました、これでレンガを上下に動かすことができます。2 つのキーを同時に押すと、両方のブロックが目的の方向に移動します。ブロックは、間隔が 1 に設定されたタイマー ティックによってトリガーされるペイント イベントで描画されます。
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawEllipse(ellipsePen, x, y, ballSize, ballSize );
e.Graphics.FillEllipse(Brushes.White ,x+1, y+1, ballSize, ballSize);
e.Graphics.FillRectangle(Brushes.White, one.BrickLocationX+1, one.BrickLocationY+1, Brick.BrickWidth, Brick.BrickHeight);
e.Graphics.FillRectangle(Brushes.White, two.BrickLocationX+1, two.BrickLocationY+1, Brick.BrickWidth, Brick.BrickHeight);
}
また、 KeyUpとKeyPressを組み合わせてこれを実行しようとしましたが、成功しませんでした。頭に浮かんだのはレンガに糸を通すことだけでしたが、その方法がわかりませんでした。スレッド化せずにこのようなマルチプレイヤー コントロールを処理する方法はありますか?
PSキーボードは、一度に複数のボタンを操作できます。