我正在制作一个井字游戏。我需要检查玩家是否正在点击他们已经点击过的方块。

问题是第一次点击本身显示错误。
我的更新代码是:

    MouseState mouse = Mouse.GetState();
    int x, y;
    int go = 0;
    if (mouse.LeftButton == ButtonState.Pressed)
    {
        showerror = 0;
        gamestate = 1;
        x = mouse.X;
        y = mouse.Y;
        int getx = x / squaresize;
        int gety = y / squaresize;
        for (int i = 0; i < 3; i++)
        {
            if (go == 1)
            {
                break;
            }
            for (int j = 0; j < 3; j++)
            {
                if (getx == i && gety == j)
                {
                    if (storex[i, j] == 0)
                    {
                       showerror = 1;
                    }
                    go = 1;
                    if (showerror != 1)
                    {
                        loc = i;
                        loc2 = j;
                        storex[i, j] = 0;
                        break;
                    }
                }
            }
        }
    }

每当单击左按钮时,showerror 都会设置为 0。我的矩阵是一个用于存储信息的 3x3 矩阵。如果它是 0 意味着它已经被点击。所以在循环中我检查 store[i,j] == 0 然后将 showerror 设置为 1。
现在在 draw 函数中,我调用了 showerror
spriteBatch.Begin();
if (showerror == 1)
{
    spriteBatch.Draw(invalid, new Rectangle(25, 280, 105, 19), Color.White);
}
spriteBatch.End();

问题是每当我点击空方块它就会变成十字但会显示错误。请帮帮我

最佳答案

如何修复:

添加一个新的全局变量来存储上一帧的鼠标状态:

MouseState oldMouseState;

在更新方法的开头(或结尾),添加这个,
oldMouseState = mouse;

并替换
if (mouse.LeftButton == ButtonState.Pressed)


if (mouse.LeftButton == ButtonState.Pressed && oldMouseState.LeftButton == ButtonState.Released)

这样做的目的是检查您是否单击了一下,释放了键然后按下,因为有时您可能会按住多个帧的键。

回顾:

通过在更新oldMouseState之前(或完成后)设置currentMouseState,可以确保oldMouseState将比currentMouseState落后一帧。使用它,您可以检查按钮是否在前一帧按下,但不再按下,并相应地处理输入。扩展它的一个好主意是编写一些扩展方法,如 IsHolding()IsClicking() 等。

在简单的代码中:
private MouseState oldMouseState, currentMouseState;
protected override void Update(GameTime gameTime)
{
     oldMouseState = currentMouseState;
     currentMouseState = Mouse.GetState();
     //TODO: Update your code here
}

关于c# - XNA - Mouse.Left Button 在 Update 中被多次执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15733298/

10-11 11:45