如何检测一个键是否在xna中被按了多次

本文关键字:xna 检测 何检测 一个 是否 | 更新日期: 2023-09-27 18:10:42

我试图得到一个纹理切换打开和关闭当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被按下并检测它是否偶数使它为假,如果它是奇数使它为真?

如何检测一个键是否在xna中被按了多次

这段代码将切换collisionhelp布尔值的开启和关闭,但它将在每一帧F1键被按住时发生。

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

所以如果你运行60fps并且按住F1键1秒,它将打开和关闭碰撞帮助30次。

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

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

也许,这就是你需要的:

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