我在这里有一些简单的代码来获取鼠标位置并绘制它:
class Pointer
{
MouseState currPointerState;
Vector2 currPointerPos;
public Pointer()
{
}
public void Update()
{
currPointerState = Mouse.GetState();
currPointerPos.X = currPointerState.X;
currPointerPos.Y = currPointerState.Y;
}
public void Draw(SpriteBatch spriteBatch, Texture2D pointerTexture)
{
spriteBatch.Draw(pointerTexture, currPointerPos, Color.White);
}
}
然后在我的主游戏文件中:
protected override void Update(GameTime gameTime)
{
pointer.Update();
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
pointer.Draw(spriteBatch, pointerTexture);
menuManager.Draw(spriteBatch, menu_bar);
spriteBatch.End();
base.Draw(gameTime);
}
游戏目前在一个窗口中运行,但是鼠标距离太远500像素,距离实际鼠标位置100像素。
在我添加以下代码后发生了这种情况:(菜单绘图类)
enum MenuState
{
mainMenu,
playing,
options
};
class MenuManager : Game1
{
MenuState menuState = MenuState.mainMenu;
Vector2 button1 = Vector2.Zero;
public void Draw(SpriteBatch spriteBatch, Texture2D menuBar)
{
switch (menuState)
{
case MenuState.mainMenu:
spriteBatch.Draw(menuBar, button1, Color.White);
break;
}
}
}
}
知道为什么鼠标位置可能已经改变了吗?
答案 0 :(得分:4)
所以我想通了。
如果有人遇到麻烦,解决办法是删除:Game1引用作为低音类。游戏类不止一次被创建,因此窗口坐标被堆叠。