关于是什么导致我的瓷砖不适合的任何想法?

时间:2012-08-21 22:32:33

标签: c# xna double

我有一个用XNA编写的磁贴系统,并且拼贴在一起存在问题。

我的意思是,有时瓷砖被分隔1个像素(可能是2个像素?无法分辨),并且它们可以完美地融合在一起。我确信我做的数学运算是正确的,我不知道是什么导致了这个问题。

令人惊讶的是,当我将瓷砖的尺寸(一个双倍)增加到1000时,这个问题就解决了。尺寸只相对于我的相机变焦,所以这根本不会影响游戏,但是我不得不这样做困扰我此

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

编辑:事实上,任何低于995的图块大小都有问题,但上面的任何内容都是好的,这是一种奇怪的精度问题。高数字或其他什么,双数学更准确吗?

3 个答案:

答案 0 :(得分:1)

嗯,像素是整数,如果你的瓷砖大小是双倍的,那就意味着你必须进行某种转换以获得像素,这反过来可能是你获得分离的地方。

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

答案 1 :(得分:0)

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

我记不起具体细节,但它出现了Math.Round(0.5) = 0Math.Round(1.5) = 2之类的东西!

答案 2 :(得分:0)

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

以下是我如何布置由大小为32x32的瓷砖组成的水平。

  • 平铺类包含平铺纹理和平铺网格位置。
  • 通过Tile集合迭代并绘制它们:
    • X = gridPosition.X * textureWidth
    • Y = gridPosition.Y * textureHeight

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