我正在使用 Windows 窗体应用程序编写自己的游戏。应该是多人游戏。每个球员都可以控制砖块将球保持在球场上,但问题是两名球员不能同时按下控制键。在第一个玩家的移动过程中,第二个玩家每按一次键,第一个玩家的积木就会停止。但是,如果他们同时按下键,两块砖都会移动。我使用了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();
}
}
好的,这让我可以上下移动砖块。如果我同时按下两个键,两块砖都会朝想要的方向移动。砖块是在间隔设置为 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键盘能够同时处理多个按钮。