【问题标题】:Why does my game interpret the mouse pointers coordinates wrong为什么我的游戏解释鼠标指针坐标错误
【发布时间】:2014-01-28 23:27:57
【问题描述】:

我正在制作一个单人游戏 (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);
}

还有一件事是,作为鼠标指针,真实的指针越靠近左上角,假定鼠标坐标的偏移量就越小,但是随着您越来越接近屏幕的右下角,假定的鼠标坐标鼠标坐标离得更远。 老实说,我不知道出了什么问题,但对可能出问题的任何想法都将不胜感激。谢谢!

【问题讨论】:

  • 坐标错了……怎么回事?
  • 你能把代码粘贴到你画塔的地方吗?
  • 您可能想要提供更多关于mouseState.XmouseState.Y 返回的位置如何“关闭”的信息。根据文档,返回的坐标是相对于游戏窗口的左上角的。
  • 一个值得注意的事情是,当您将鼠标指针移近左上角时,在鼠标指针处绘制的精灵的偏移量变得越来越小,并且随着您将它移得更远并且越靠近屏幕右下角,精灵与真实鼠标指针的偏移量越大。
  • 您是否尝试过将游戏设置为全屏,并将PrefferedBackBufferWidth and Height设置为与显示器相同?

标签: c# xna monogame


【解决方案1】:

这是对这个问题和您的question on hold 的回应。要解决此问题,您可以在绘制图像时按比例缩小图像。我不太确定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);
}

然后像以前一样绘制此图像,使用center 作为目标矩形。我在没有编译器或调试的情况下编写了这段代码,但我认为它应该给你一个基本的想法。 高温

【讨论】:

  • 当我谈论图像时,我指的是背景
  • @Detinator10,你可以使用类似于我上面所说的东西。只需将背景的中心矩形更改为new Rectangle(0,0,1366, 768)
  • 我做到了,它成功了,唯一的事情是我的敌人从屏幕上生成了。而且如果我用不同的显示器分辨率玩游戏,游戏的画法还是一样吗?
  • 我不知道为什么你的敌人会在屏幕外生成,因为我不知道代码,但我会尝试类似于我为生成塔而放置的东西。不,游戏会以不同的方式绘制。但是,您可以通过执行new Rectangle(0, 0, GraphicsDevice.PresentationParameters.BackBufferWidth, GraphicsDevice.PresentationParameters.BackBufferHeight) 来获取屏幕分辨率而不是new Rectangle(0, 0, 1366, 768) 这将绘制背景为计算机的分辨率(如果您没有预设任何一个属性并且游戏处于全屏状态)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-23
    • 2017-02-08
    • 2021-06-17
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多