最近按官方wiki写地图块代码时遇到此问题:在Tiled里画好地图,一切都按wiki步骤来,当把地图显示出来,相机在地图上移动时,会发现地图块之间偶尔会出现缝隙(或者是黑线、白线,根据clear用的填充色不同而不同),用英文来描述,就是tiles之间有gap或white/black line,更专业一点的叫法就是tile bleeding。
借用一下别人的图
于是google了一顿,终于找到算是OK的解决办法了。
据说此问题是libgdx论坛的日经问题,每隔几天就会有人问,因为一直也没有十分优雅的解决方案,目前唯一据说比较实用的解决办法其原理也是囧得不行,听起来就让人脱力,而给出解答的人往往也都是三言两语,说的都是那种“说起来容易做起来巨麻烦”的话,让人摸不到头脑。于是仍然一直有人在问,恶性循环。。。
然后我终于看到了一篇博客,给出了简单详细的解决办法:http://thekemiren.blogspot.jp/2014/07/tile-bleeding-in-libgdx-using-tiled.html
(注意得翻墙)
我把自己搜到的相关知识总结一下:
首先这个问题让人想到的就是filter方案的问题,是不是误用了linear,而其实应该换成nearest。用过unity3D或者熟习openGL的人估计首先都会想到这个。但是可惜不是,据说libgdx里的OrthogonalTiledMapRenderer渲染器默认用的就是nearest,还有一说这个也不是特别好改(或是改了之后效果不好?感觉论坛上的人都各执一词),总之此路不通。
解决方案二,考虑到之所以出现这种问题,是因为相机(camera)在移动的时候,移动值的类型是float,精度十分高,所以当恰好移动到某一小精度时,可能会导致某两个相邻图