我目前正在开发一款游戏。游戏主要基于点击按钮,这就是问题发生的地方。每当我按住鼠标左键然后将其移动到游戏中的按钮上时,该按钮立即被点击。
我试图通过多种方式解决问题,通过以不同的方式重新排列if语句,添加额外的bool以检查鼠标按钮是否被点击等等。但没有任何运气。在任何地方都找不到任何解决方案。
public override void Update(GameTime gameTime)
{
MouseState state = Mouse.GetState();
if (new Rectangle((position - ElementCenter).ToPoint(), sprite.Bounds.Size)
.Contains(state.Position) && oldState.LeftButton == ButtonState.Released)
{
renderColor = Color.LightSlateGray;
if (state.LeftButton == ButtonState.Pressed &&
oldState.LeftButton == ButtonState.Released)
{
switch (button)
{
case "UI/submit":
if (GameWorld.Instance.Team.UserTeamName.Length > 0)
{
GameWorld.Instance.SubmitTeamName();
}
break;
case "UI/teammanager":
GameWorld.Instance.TeamManager();
break;
default:
break;
}
}
}
else
{
renderColor = Color.White;
}
oldState = state;
}
理想情况下,我希望只有在单击按钮之前释放鼠标左键时才会单击一个按钮。
如果将oldState
声明为实例字段,则此类的不同实例将具有不同的版本。即,旧州可能会迷路。
宣布oldState
为static
!
private static MouseState oldState = Mouse.GetState();
我通常使用这样的类来读取输入
public class InputManager
{
KeyboardState currentKeyboard, previousKeyboard;
MouseState currentMouse, previousMouse;
public bool LeftKeyIsHeldDown { get; private set; }
public bool RightKeyIsHeldDown { get; private set; }
public bool JumpWasJustPressed { get; private set; }
public bool FireWasJustPressed { get; private set; }
public void Update()
{
previousKeyboard = currentKeyboard;
currentKeyboard = Keyboard.GetState();
previousMouse = currentMouse;
currentMouse = Mouse.GetState();
LeftKeyIsHeldDown = currentKeyboard.IsKeyDown(Keys.A);
RightKeyIsHeldDown = currentKeyboard.IsKeyDown(Keys.D);
JumpWasJustPressed = currentKeyboard.IsKeyDown(Keys.Space) && previousKeyboard.IsKeyUp(Keys.Space);
FireWasJustPressed = currentMouse.LeftButton == ButtonState.Pressed && previousMouse.LeftButton == ButtonState.Released;
}
}