我有Player1Y
和Player2Y
两位玩家的Y
值。
我希望Player1
在按Y
将其移动时降低其W
值。同样适用于Player2
,但是按Up
。
我正在使用此代码:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up && Player2Y > 0)
{
Player2Y -= 5;
Invalidate();
}
if (e.KeyCode == Keys.W && Player1Y > 0)
{
Player1Y -= 5;
Invalidate();
}
}
问题在于有2个玩家,当他们同时按下W
和Up
时,只有一个玩家会移动,具体取决于最后按下的人。我怎么解决这个问题?
答案 0 :(得分:0)
为任何玩家添加额外标志以检查更改Y.我想如果在一个事件的处理程序中按下 Up 和 W 键,则认为它是同时按下的。所以主要是你在处理程序事件中只移动一个玩家。
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
bool isYChanged = false;
if (e.KeyCode == Keys.Up && Player2Y > 0)
{
Player2Y -= 5;
Invalidate();
isYChanged = true;
}
if (e.KeyCode == Keys.W && Player1Y > 0 && isYChanged == false)
{
Player1Y -= 5;
Invalidate();
}
}
答案 1 :(得分:0)
我认为您应该为代码添加同步锁:
private System.Object _synchLock = new System.Object();
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
lock(_synchLock)
{
if (e.KeyCode == Keys.Up && Player2Y > 0)
{
Player2Y -= 5;
Invalidate();
}
if (e.KeyCode == Keys.W && Player1Y > 0)
{
Player1Y -= 5;
Invalidate();
}
}
}