Xna 如何创建类似按钮/开关的平铺,您可以在其中踩下它并更改其值?

Xna 如何创建类似按钮/开关的平铺,您可以在其中踩下它并更改其值?,xna,xna-4.0,Xna,Xna 4.0,如果玩家踩到按钮磁贴,当其为真时,它将变为假。如果玩家踩到按钮磁贴,当它为false时,它将变为true 问题是,当玩家站在按钮块上(与按钮块相交)时,它会不断更新条件。所以,从真到假。因为它是假的,玩家将它交叉,它又变成了真的。真假真假等等 我使用ElapsedGameTime使更新过程变慢,玩家可以有机会将按钮更改为true或false 然而,这并不是我想要的解决方案。当玩家站在按钮磁贴上时,是否有其他方法使其保持假/真状态?使按钮有一个默认为假的布尔值 然后,当玩家输入互动程序时,检查输入

如果玩家踩到按钮磁贴,当其为真时,它将变为假。如果玩家踩到按钮磁贴,当它为false时,它将变为true

问题是,当玩家站在按钮块上(与按钮块相交)时,它会不断更新条件。所以,从真到假。因为它是假的,玩家将它交叉,它又变成了真的。真假真假等等

我使用ElapsedGameTime使更新过程变慢,玩家可以有机会将按钮更改为true或false


然而,这并不是我想要的解决方案。当玩家站在按钮磁贴上时,是否有其他方法使其保持假/真状态?

使按钮有一个默认为假的
布尔值

然后,当玩家输入互动程序时,检查输入事件是什么!isPressed


你所要做的就是在你的情况下结合两件事,玩家踩下按钮,而按钮还没有被触发-你不必在时间上放慢速度来完成这一点。然后,当播放器离开磁贴或不再在磁贴上时,根据您的检查内容,只需再次将isPressed设置为false。

使按钮具有一个默认为false的
bool isPressed

然后,当玩家输入互动程序时,检查输入事件是什么!isPressed


你所要做的就是在你的情况下结合两件事,玩家踩下按钮,而按钮还没有被触发-你不必在时间上放慢速度来完成这一点。然后,当播放机离开磁贴或不再在磁贴上时(取决于您的检查内容),只需再次将isPressed设置为false。

我为您提供了解决方案。首先,创建参数:

MouseState nowMouseState, lastMouseState;
在LoadContent()中:

创建一个函数:

public void ChangeState()//I check button have position:Vector2(0,0) and hight= width=100

{

 nowMouseState= Mouse.GetState();//click

 if (Mouse.GetState().X>0&&Mouse.GetState().X<100
&&Mouse.GetState().Y>0&&Mouse.GetState().Y<100
&&nowMouseState.LeftButton==ButtonState.Pressed
&&lastMouseState.LeftButton==ButtonState.Released)

{

                if (Button_Tile)
                    Button_Tile=false;
                else
                    Button_Tile= true;

                lastMouseState = nowMouseState;//click
            }
            if (Mouse.GetState().LeftButton==ButtonState.Released)
            {
                lastMouseState = Mouse.GetState();
            }
}
public void ChangeState()//我检查按钮的位置:Vector2(0,0)和hight=width=100
{
nowMouseState=Mouse.GetState();//单击

如果(Mouse.GetState().X>0&&Mouse.GetState().X0&&Mouse.GetState().Y我为您提供了解决方案。首先,创建参数:

MouseState nowMouseState, lastMouseState;
在LoadContent()中:

创建一个函数:

public void ChangeState()//I check button have position:Vector2(0,0) and hight= width=100

{

 nowMouseState= Mouse.GetState();//click

 if (Mouse.GetState().X>0&&Mouse.GetState().X<100
&&Mouse.GetState().Y>0&&Mouse.GetState().Y<100
&&nowMouseState.LeftButton==ButtonState.Pressed
&&lastMouseState.LeftButton==ButtonState.Released)

{

                if (Button_Tile)
                    Button_Tile=false;
                else
                    Button_Tile= true;

                lastMouseState = nowMouseState;//click
            }
            if (Mouse.GetState().LeftButton==ButtonState.Released)
            {
                lastMouseState = Mouse.GetState();
            }
}
public void ChangeState()//我检查按钮的位置:Vector2(0,0)和hight=width=100
{
nowMouseState=Mouse.GetState();//单击
如果(Mouse.GetState().X>0&&Mouse.GetState().X0&&Mouse.GetState().Y