2人游戏KeyDown有不良行为

时间:2017-11-04 18:35:47

标签: c# keypress

我有Player1YPlayer2Y两位玩家的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个玩家,当他们同时按下WUp时,只有一个玩家会移动,具体取决于最后按下的人。我怎么解决这个问题?

2 个答案:

答案 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();
       }
    } 
}