0

我正在制作一个简单的点击游戏,只是为了让我掌握鼠标输入类。

所以,我有一个按钮类(它只是一只猫的随机图片^^)和一个计数器类(计算我点击了多少次),游戏本身将是一个“Cookie Clicker”类型的游戏; D

但是当我从另一个类中使用它时,一个变量不会更新,即使它是公共的,这是我的类:

class catButton
{
    Texture2D buttonTexture;
    Vector2 buttonPosition;
    public Rectangle buttonRectangle;

    public MouseState currentMouseState;
    public MouseState previousMouseState;

    public void Initialize()
    {
        buttonPosition = new Vector2(150, 300);
    }

    public void LoadContent(ContentManager Content)
    {
        buttonTexture = Content.Load<Texture2D>("cat");
        buttonRectangle = new Rectangle((int)buttonPosition.X, (int)buttonPosition.Y, buttonTexture.Width, buttonTexture.Height);    
    }

    public void Update(GameTime gameTime)
    {
        previousMouseState = currentMouseState;
        currentMouseState = Mouse.GetState();  
    }

    public void Draw(SpriteBatch spriteBatch, GameTime gameTime)
    {
            spriteBatch.Draw(buttonTexture, buttonRectangle, Color.White);
    }      
}

和我的柜台:

class catCounter
{
    SpriteFont catfont;
    Vector2 counterPosition;

    catButton button = new catButton();


    public MouseState currentMouseState;
    public MouseState previousMouseState;

    KeyboardState keyState = Keyboard.GetState();

    public float amountOfCats = 0;

    public catCounter()
    {

    }

    public void LoadContent(ContentManager Content)
    {
        counterPosition = new Vector2(205, 155);
        catfont = Content.Load<SpriteFont>("counter");
    }

    public void Update(GameTime gameTime)
    {
        MouseState currentMouseState = Mouse.GetState();

        if (currentMouseState.LeftButton == ButtonState.Pressed && previousMouseState.LeftButton == ButtonState.Released && button.buttonRectangle.Contains(new Point(currentMouseState.X, currentMouseState.Y)))
        {
            amountOfCats++;
        }

        previousMouseState = currentMouseState;
    }

    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.DrawString(catfont, "Cats: " + amountOfCats, counterPosition, Color.White);
    }
}

Game1.cs我应该改为点击鼠标吗?

我很抱歉写了这么短的时间,如果你有什么知道的告诉我!

提前致谢!

4

2 回答 2

1

当您从另一个类中使用它时,为什么变量不更新?您必须接近如何错误地收集此变量。

它是哪个变量?什么特定的调用应该更新它,但没有按预期进行?

catCounter我假设您通过首先将类初始化为 Game1.cs 文件中的一个对象,然后在 Game1.cs 中的相关方法中调用Update()这个对象来更新和绘制组件Draw(),但只是提到它以防万一.

值得注意的是,Update方法catButton只是浪费。只需删除其中的两行。它绝对没有任何作用,因为您不会在任何地方重复使用这些鼠标状态。同样在您的catCounter更新中,您重新定义currentMouseState为该范围内的局部变量,从而使您public MouseState currentMouseState变得毫无价值和未使用。

无论哪种方式,关于 XNA 组件的一些注意事项。由于您的类当前遵循给定的 XNA 结构,因此您应该考虑DrawableGameComponent为您的类继承:

class catCounter: DrawableGameComponent

允许您执行以下操作:

Components.Add(new catCounter());

这将使您不必手动调用Update()andDraw()方法,尽管您需要覆盖特定于它的方法(例如Initialize, LoadContent, Update, Draw)。

很抱歉,当您不告诉我们问题出在哪里时,我无法理解您的问题所在。

于 2013-10-17T22:49:50.973 回答
0

好的,我认为更好的方法是创建一个名为的变量clicked并将其设置为False.

然后:

    public void Update(GameTime gameTime)
    {
        MouseState currentMouseState = Mouse.GetState();

        if (currentMouseState.LeftButton == ButtonState.Pressed)
        {
            if (clicked == False && button.buttonRectangle.Contains(new Point(currentMouseState.X, currentMouseState.Y)))
            {
                amountOfCats++;
                clicked = True;
            }
        }
        else 
        {
            clicked = False
        }

        // Not needed - previousMouseState = currentMouseState;
    }

注意:不要忘记点击bool变量。

这样,您可以防止用户按住鼠标,并且它不依赖于第二个鼠标状态变量。

至于您的代码不起作用的原因,是因为它Mouse.GetState()会自动更新。因此,previousMouseState将始终是当前鼠标状态。

我希望这会有所帮助。

莫娜

于 2013-10-17T22:50:47.753 回答