我有一个用XNA编写的磁贴系统,并且拼贴在一起存在问题。
我的意思是,有时瓷砖被分隔1个像素(可能是2个像素?无法分辨),并且它们可以完美地融合在一起。我确信我做的数学运算是正确的,我不知道是什么导致了这个问题。
令人惊讶的是,当我将瓷砖的尺寸(一个双倍)增加到1000时,这个问题就解决了。尺寸只相对于我的相机变焦,所以这根本不会影响游戏,但是我不得不这样做困扰我此
关于可能导致这种情况的任何想法?
编辑:事实上,任何低于995的图块大小都有问题,但上面的任何内容都是好的,这是一种奇怪的精度问题。高数字或其他什么,双数学更准确吗?
答案 0 :(得分:1)
嗯,像素是整数,如果你的瓷砖大小是双倍的,那就意味着你必须进行某种转换以获得像素,这反过来可能是你获得分离的地方。
例如,如果图块A从0开始,长度为9.9,那么您在哪里放置下一个图块?
答案 1 :(得分:0)
如果你在这种情况下进行四舍五入,你会使用Math.Round(value, 0, MidpointRounding.AwayFromZero)
,因为Math.Round(value)
不会返回你在数学上被教导为“舍入”的内容。
我记不起具体细节,但它出现了Math.Round(0.5) = 0
和Math.Round(1.5) = 2
之类的东西!
答案 2 :(得分:0)
如果不了解您如何处理磁贴放置,则难以诊断。你的瓷砖是固定宽度和高度还是变量?
以下是我如何布置由大小为32x32的瓷砖组成的水平。
因此,如果在网格位置(0,0)处具有32x32的图块,则它将在(0,0)处绘制。 如果你在网格位置(0,1)有一个32x32的图块,那么它将被绘制在(0,32)。