如何创建Button / Switch-Like Tile,你可以踩到它并改变它的价值?

时间:2012-12-01 02:22:45

标签: xna xna-4.0

如果玩家在真实时按下Button-Tile,则会变为false。如果玩家在假按钮时踩下按钮图块,则表示该图形为真。

问题是,当玩家站在(相交)Button-Tile时,它会不断更新条件。所以,从真实来看,它变得虚假。因为它的错误和玩家相交,它再次成为现实。真假 - 真假 - 等等。

我使用ElapsedGameTime使更新过程变慢,玩家有机会将Button更改为true或false。

但是,这不是我想要的解决方案。当玩家站在按钮区块上时,还有其他方法可以使其保持在False / True状态吗?

2 个答案:

答案 0 :(得分:5)

使按钮的bool isPressed默认为false。

然后当玩家进入牌时,检查输入事件是&& !isPressed

你所要做的就是在你的情况下结合两件事情,玩家踩在按钮上并且按钮还没有被触发 - 你不必为了实现这个目的而减慢任何时间。然后当玩家离开瓷砖或不再在瓷砖上时,取决于你的支票是什么,只需将isPressed再次设置为假。

答案 1 :(得分:0)

我有解决方案。首先,您创建参数:

MouseState nowMouseState, lastMouseState;

在加载内容()中:

lastMouseState = Mouse.GetState();

创建一个功能:

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();
            }
}

然后你可以将ChangeState()放在Update()中。