【问题标题】:Why is my MouseState not correct?为什么我的 MouseState 不正确?
【发布时间】:2014-06-04 23:23:36
【问题描述】:

我正在尝试通过鼠标输入在我正在制作的塔防游戏中放置塔。一切正常,除了当我放下塔时,它没有放在我的指针所在的位置。我进行了一个小测试,让游戏在它认为我的指针所在的位置绘制了一个精灵,并将它拉离我的指针很远。这是我用来获取鼠标坐标的代码:

mouseState = Mouse.GetState(); //mouseState is of type MouseState

cellX = (int)(mouseState.X / 80);
cellY = (int)(mouseState.Y / 80);

tileX = cellX * 80;
tileY = cellY * 80;

这是塔使用坐标的代码:

Tower tower = new Tower(BlueberryBushTexture, new Vector2(tileX, tileY));

我能想到的唯一一件事是我必须使用错误的 MouseState 坐标。谢谢!!!

【问题讨论】:

  • 这个数学,对我来说,看起来像是将 tileXtileY 设置为鼠标坐标的整数部分,因为你要除然后乘以 80。“cell ”和“瓷砖”?在前两次计算之后,cellXcellY 不是已经代表了您单击的位置的图块坐标吗?
  • 我试过了,但没用,只是在左上角生成了我所有的塔
  • 我使用了该部分教程中的代码,这就是他所说的
  • 在上面的例子中,如果鼠标在位置 (77, 114) 并且我们使用上面的等式来计算它在数组空间中的位置,我们得到以下结果: CellX = (int) (77 / 32) = (int) (2.40625) = 2 这是正确的,正如我们在图像中看到的那样,该点位于第三个正方形中。现在我们知道指针在哪个单元格中,我们可以通过将其乘以 32(我们的瓦片的寡妇)来计算该单元格在级别空间中的位置 TileX = 2 * 32 = 64
  • 是的,你是对的。我的错。尝试输入打印语句,点击时查看tileXtileY 的值;检查并查看这些值是否符合您的预期。您在实际放置塔时可能有一些错误的逻辑。

标签: c# xna monogame


【解决方案1】:

您可以简单地使用模数,而不是除法和乘法!

mouseState = Mouse.GetState();

tileX = (int)(mouseState.X - (mouseState.X % 80));
tileY = (int)(mouseState.Y - (mouseState.Y % 80));

/*
This way it will always be highest multiple of 80 lower the the Mouse's position

E.g. mouseState = (243, 712)
tileX = (int)(243 - (243 % 80));
      = (int)(243 - (3));
      = 240;

tileY = (int)(712 - (712 % 80));
      = (int)(712 - (72));
      = 640;

Doing check sum's like this can be really helpful when later modifying 
(Say you make the center of the tile its origin, instead of the top-left corner)
*/

这应该可以帮助您解决难题,并希望对您未来的游戏项目有所帮助。

莫娜。

【讨论】:

  • 它没有用。它仍然关闭,我什至无法用它放下塔。不过还是谢谢你的建议。
【解决方案2】:

这是旧的,但我看到它...... 你除以 80 然后乘以 80,你可以使用 Math.Floor()。 这不会给你一个平铺索引它给你鼠标位置。然后,您还需要弄清楚这点是什么图块,如果您有一个移动的相机,您还需要考虑相机的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2014-04-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多