如何检测xna中是否多次按下某个键?

时间:2013-04-24 22:42:17

标签: c# xna-4.0

我试图在按下F1键时打开和关闭纹理,我可以让它打开,但它不会再次关闭,除非我使用单独的键这样做。

这对我有用:

    if(Keystate.IsKeyDown(Keys.F1))
     {
       collisionhelp = true;
     }
然后我做了:

    if(Keystate.IsKeyDown(Keys.F2))
     {
       collisionhelp = false;
     }

但我想要的是第二次按下F1,然后将其设置为false,但目前导致它根本不显示。

我试过了:

    if(Keystate.IsKeyDown(Keys.F1))
     {
       collisionhelp = true;

        if(collisionhelp == true && Keystate.IsKeyDown(Keys.F1))
         {
           collisionhelp = false;
         }
     }

完全没有骰子,按钮甚至不再做任何事了。

必须有一种方法可以在XNA中执行此操作,可能每次按F1都会将1加到一个整数中,并检测它是否为偶数,如果为奇数,是否为奇数?

2 个答案:

答案 0 :(得分:1)

此代码将打开和关闭collisionhelp布尔值,但每次按住F1键时都会发生这种情况。

if(Keystate.IsKeyDown(Keys.F1))
{
    collisionhelp = !collisionhelp;
}

因此,如果您运行60fps并按住F1键1秒钟,它将打开和关闭collisionhelp 30次。

我认为你想要的是第二个布尔值来记录如果在前一帧中按下按钮并且每次按F1只切换碰撞帮助一次:

if(Keystate.IsKeyDown(Keys.F1))
{
    if(!f1AlreadyDown)
    {
        f1AlreadyDown = true;
        collisionhelp = !collisionhelp;
    }
}
else
{
    f1AlreadyDown = false;
}

答案 1 :(得分:0)

也许,这就是你所需要的:

if(Keystate.IsKeyDown(Keys.F1))
{
   collisionhelp = !collisionhelp;
}