我正在制作一个简单的点击游戏,只是为了让我的手掌握鼠标输入课程。
所以,我有一个按钮类(它只是猫的随机图片^^)和计数器类(计算我点击的次数),游戏本身将是“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
中点击鼠标吗?
如果你必须知道任何事情告诉我,我很快就写下了这个抱歉!
提前致谢!
答案 0 :(得分:1)
当您从另一个类使用变量时,为什么不更改变量? 您必须正在接近如何错误地收集此变量。
是哪个变量?什么特别的电话会更新它,但没有按预期进行?
我假设您通过首先将catCounter
类初始化为Game1.cs文件中的对象并在相关内的此对象上调用Update()
和Draw()
来更新和绘制组件。 Game1.cs中的方法也是如此,但只是在缺少的情况下提及它。
值得注意Update
的{{1}}方法只是浪费。只需删除其中的两行。它没有任何作用,因为你不能在任何地方重复使用这些鼠标状态。同样在catButton
更新中,您将catCounter
重新定义为该范围内的局部变量,使currentMouseState
毫无价值且未使用。
无论哪种方式,有关XNA组件的一些注意事项。由于您的类当前遵循给定的XNA结构,因此您应该考虑为您的类继承public MouseState currentMouseState
:
DrawableGameComponent
允许你这样做:
class catCounter: DrawableGameComponent
这将使您不必手动调用Components.Add(new catCounter());
和Update()
方法,尽管您需要覆盖特定于它的方法(例如Draw()
,Initialize
,LoadContent
,Update
)。
对不起,当你没有告诉我们问题出在哪里时,我无法理解你的问题在哪里。
答案 1 :(得分: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
将始终是当前的鼠标状态。
我希望这会有所帮助。
莫纳