2

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);
    }

また、 KeyUpKeyPressを組み合わせてこれを実行しようとしましたが、成功しませんでした。頭に浮かんだのはレンガに糸を通すことだけでしたが、その方法がわかりませんでした。スレッド化せずにこのようなマルチプレイヤー コントロールを処理する方法はありますか?

PSキーボードは、一度に複数のボタンを操作できます。

4

2 に答える 2

0

これは自分で追跡する必要があると思います。基本的に、キーダウンでは w を認識し、キーアップで w が離されるまで保持されていると見なします。s キーと同じです。

次に、実行ループで、アクティブなキーを探し、そこで方向ロジックを実行します。

于 2013-09-06T15:11:05.183 に答える