0

我有一个用 XNA 编写的瓦片系统,但瓦片装配在一起存在问题。

我的意思是,有时图块被 1 个像素分隔(也许是 2 个像素?不能说),并且它们应该完美地组合在一起。我确信我为将它们组合在一起所做的数学运算是正确的,我不知道是什么导致了这个问题。

令人惊讶的是,当我将图块的大小(双倍)提高到 1000 时,这个问题得到了解决。大小仅与我的相机变焦有关,所以这根本不会影响游戏玩法,但它困扰着我,我必须这样做。

关于可能导致这种情况的任何想法?

编辑:事实上,任何低于 995 的瓷砖尺寸都有问题,但任何高于 995 的东西都很好,这是某种奇怪的精度问题。双倍数学对高数字或其他东西更准确吗?

4

3 回答 3

1

好吧,像素是整数,如果你的图块的大小是双倍的,这意味着你必须进行某种转换才能得到像素,这反过来可能是你得到分离的地方。

例如,如果图块 A 从 0 开始,长度为 9.9,那么您将下一个图块放在哪里?

于 2012-08-21T22:36:13.107 回答
0

如果不了解您如何处理瓷砖放置,则很难诊断。您的瓷砖是固定宽度和高度还是可变的?

这是我如何布置由大小为 32x32 的图块组成的关卡。

  • 瓦片类包含瓦片的纹理和瓦片的网格位置。
  • 遍历 Tile 集合并将它们绘制在:
    • X = gridPosition.X * textureWidth
    • Y = gridPosition.Y * textureHeight

因此,如果您在网格位置 (0, 0) 有一个 32x32 的图块,那么它将在 (0, 0) 处绘制。如果您在网格位置 (0, 1) 有一个 32x32 的图块,那么它将在 (0, 32) 处绘制。

于 2012-08-23T13:37:22.177 回答
0

如果您在这种情况下进行四舍五入,您将使用Math.Round(value, 0, MidpointRounding.AwayFromZero)因为Math.Round(value)不会返回您在数学上被教导为“四舍五入”的内容。

我不记得具体细节,但它会出现Math.Round(0.5) = 0Math.Round(1.5) = 2

于 2012-08-22T09:29:26.103 回答