C# 如何检测xna中是否多次按下某个键?
我试图在按下F1键时打开和关闭纹理,我可以让它打开,但它不会再次关闭,除非我使用单独的键来关闭 这对我很有用: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
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的答案将修复闪烁。