Я кодирую свою собственную игру с помощью приложений Windows Forms. Предполагается, что это многопользовательская игра. Каждый игрок может контролировать свой кирпич, чтобы держать мяч в поле, но проблема в том, что оба игрока не могут одновременно нажимать элементы управления. Каждый раз, когда второй игрок нажимает клавишу во время движения первого, кирпич первого игрока останавливается. Но, если они нажимают клавиши в том же ручном, оба кирпича движутся. Я использовал 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, но без успеха. Единственное, что мне пришло в голову, это нарезать кирпичи, но понятия не имели, как это сделать. Я там каким-то образом могу обрабатывать многопользовательские элементы управления, такие как без потоки?
P.S. Клавиатура способна обрабатывать сразу несколько кнопок.
winforms не предназначен для использования в разработке игр. используйте XNA или, по крайней мере, WPF. –