2013-10-17 125 views
0

我正在做一个简单的点击游戏,只是为了让我的手在鼠标输入类。因此,我有一个按钮类(这只是一个猫的^^随机图片)和一个计数器类(它统计了我点击了多少次),游戏本身将是一个“Cookie点击者”类型的游戏; 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而不是?

我很短时间写这个抱歉,如果你必须知道什么告诉我!

在此先感谢!

回答

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()Draw()方法,但您需要覆盖特定方法(例如,Initialize,LoadContent,Update,Draw)。

对不起,当你不告诉我们问题存在的地方时,我无法理解你的问题在哪里。

+0

+1 for DrawableGameComponent – pinckerman

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

NB:不要忘记将点击一个bool变量。

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

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

我希望这有助于。

Mona