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

C# 如何检测xna中是否多次按下某个键?,c#,xna-4.0,C#,Xna 4.0,我试图在按下F1键时打开和关闭纹理,我可以让它打开,但它不会再次关闭,除非我使用单独的键来关闭 这对我很有用: if(Keystate.IsKeyDown(Keys.F1)) { collisionhelp = true; } 那么我会: if(Keystate.IsKeyDown(Keys.F2)) { collisionhelp = false; } 但我想要的是,第二次按下F1时,它会将其设置为fals

我试图在按下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加到一个整数中,并检测它是否为偶数,如果为假,如果为奇数,则为真?

也许,这就是您需要的:

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

此代码将打开和关闭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;
}

我正在尝试它,它会引起很多闪烁,这到底是做什么的?我对这本书不太熟悉!你放在前面,是不是与collisionhelp相反被称为运算符,并且正在反转布尔值,所以
!真==假
!false==true
。您应该确保每按一次按钮,该值都会更改一次,以防止闪烁。尝试将第一行更改为
if(Keystate.IsKeyDown(Keys.F1)和&Keystate.iskeytogled(Keys.F1))
(对此不确定)@Nero One P.S。如果前面的命令不起作用,那么我误解了
iskeytogled
函数的含义。在这种情况下,您应该执行
iskeytogled
变量没有显示,我得到的是
IsKeyUp``IsKeyDown``GetPressedKeys``GetHashCode``等于``ToString
GetType
garethGeek的答案将修复闪烁。