C# 为什么我的游戏解释鼠标指针坐标错误

C# 为什么我的游戏解释鼠标指针坐标错误,c#,xna,monogame,C#,Xna,Monogame,我正在制作一个单游戏(2D)游戏,当我尝试获取鼠标坐标时,它们是错误的。我不知道问题是什么,但这是我的代码,我从中获得坐标: MouseState mouseState; mouseState = Mouse.GetState(); test = new Tower(TowerTexture, new Vector2(mouseState.X, mouseState.Y)); //test is drawn where mouse pointer is thought to be and it

我正在制作一个单游戏(2D)游戏,当我尝试获取鼠标坐标时,它们是错误的。我不知道问题是什么,但这是我的代码,我从中获得坐标:

MouseState mouseState;
mouseState = Mouse.GetState();
test = new Tower(TowerTexture, new Vector2(mouseState.X, mouseState.Y));
//test is drawn where mouse pointer is thought to be and it is drawn off
以下是塔架图纸代码:

    foreach (Tower tower in towers)
    {
        tower.Draw(spriteBatch);
    }
这是塔的绘图功能:

public virtual void Draw(SpriteBatch spriteBatch)
{
    spriteBatch.Draw(texture, center, null, Color.White, rotation,
    origin, 1.0f, SpriteEffects.None, 0);
}
还有一点是,作为鼠标指针,真实的鼠标指针越近,到左上角,假定鼠标坐标的偏移量越小,但当您越来越靠近屏幕的右下角时,假定鼠标坐标越远。
老实说,我不知道什么地方出了问题,但如果能想到什么地方可能出了问题,我将不胜感激。谢谢大家!

问题在于我的图像分辨率大于屏幕分辨率。

这是对这个问题和您的回答。要解决此问题,可以在绘制图像时缩小图像的比例。我不太确定
center
的值是多少,但我猜它是一个中心位于鼠标指针上的矩形。要缩小图像,请尝试以下操作:

Rectangle center;

public Tower(Texture2D TowerTexture, Vector2 location)
{
    float scaledown = 10;
    float XOffset = TowerTexture.Width / (2 * scaledown); //get an X and Y offset to center the image in the rectangle
    float YOffset = TowerTexture.Height / (2 * scaledown);
    this.center = new Rectangle(location.X + XOffset, location.Y + YOffset, 
        XOffset * 2, YOffset * 2);
}
然后像以前一样,使用
居中
作为目标矩形绘制此图像。我在没有编译器或调试的情况下编写了这段代码,但我认为它应该给您一个基本的想法。
HTH

坐标错误…以什么方式?您可以将代码粘贴到绘制塔的位置吗?您可能希望提供更多信息,说明
mouseState.X
mouseState.Y
返回的位置是如何“关闭”的。根据文档,返回的坐标是相对于游戏窗口的左上角的。但值得注意的是,当您将鼠标指针移近左上角时,在鼠标指针处绘制的精灵的偏移量会越来越小,并且当您将其移离左下角时,偏移量也会越来越小屏幕右角的精灵与真实鼠标指针的偏移量较大。您是否尝试过将游戏设置为全屏,并将
PreferedBackBufferWidth和Height
设置为与显示器相同?当我谈论图像时,我指的是background@Detinator10,你可以使用类似于我上面所说的东西。只需将背景的中心矩形更改为
新矩形(0,01366768)
我这样做了,现在唯一有效的事情是我的敌人从屏幕上繁殖出来。另外,如果我用不同的显示器分辨率玩游戏,游戏的画面还会一样吗?我不知道为什么你的敌人会在屏幕外繁殖,因为我不知道代码,但我会尝试一些类似于我为繁殖塔所做的事情。不,比赛会有不同的结果。但是,您可以通过执行新矩形(0,0,GraphicsDevice.PresentationParameters.BackBufferWidth,GraphicsDevice.PresentationParameters.BackBufferHeight)而不是新矩形(0,0,1366768)来获得屏幕的分辨率。这会将背景绘制为计算机的分辨率(如果您未预设任何属性,且游戏处于全屏状态)