我在更新循环中调用了以下方法来检查是否按下了两个按钮之一。
private void CheckInputs()
{
if (CheckButton(startNewGameButtonTexture, startNewGameButtonPosition))
{
//break 1 is here
}
if (CheckButton(continueCareerButtonTexture, continueCareerButtonPosition))
{
//break 2 is here
}
}
按钮只是矩形,如果鼠标位于它们之上,并且释放了单击,则CheckButton bool返回true:
public bool CheckButton(Texture2D texture, Vector2 vector)
{
MouseState CurrentMouseState = Mouse.GetState();
bool outcome;
if (CurrentMouseState.X > vector.X && CurrentMouseState.X < vector.X + texture.Width &&
CurrentMouseState.Y > vector.Y && CurrentMouseState.Y < vector.Y + texture.Height)
{
if (CurrentMouseState.LeftButton == ButtonState.Released && PreviousMouseState == ButtonState.Pressed)
{
outcome = true;
}
else
{
outcome = false;
}
}
else
{
outcome = false;
}
PreviousMouseState = CurrentMouseState.LeftButton;
return outcome;
}
在当前顺序中,startNewGameButton工作(即调试在中断1停止),但continueCareerButton不起作用(单击按钮不会触发中断2)。
但是,如果我将支票的顺序更改为:
private void CheckInputs()
{
if (CheckButton(continueCareerButtonTexture, continueCareerButtonPosition))
{
//break 2 is here
}
if (CheckButton(startNewGameButtonTexture, startNewGameButtonPosition))
{
//break 1 is here
}
}
continueCareerButton现在正常工作(中断2),但startNewGameButton现在不起作用(中断1)。
我认为鼠标状态一定不能正常工作,但我找不到原因。
答案 0 :(得分:3)
每次检查时都要设置PreviousMouseState。
你应该每帧设置一次,最简单的方法是在Update()
函数内:
void Update(..) {
CurrentMouseState := Mouse.GetState()
// code...
PreviousMouseState = CurrentMouseState
}
否则它只能用于CheckButton()
功能的第一次呼叫,而不是每次通话。
答案 1 :(得分:2)
只要该按钮被释放,您就会在第一次调用PreviousMouseState
时将ButtonState.Released
设置为CheckButton
。因此,对CheckButton
的第二次调用永远不会返回true(因为PreviousMouseState
几乎总是等于CurrentMouseState.LeftButton
)。在两个if语句之后都不要设置PreviousMouseState
。