在使用NGUI 的UISprite Tiled拉伸方式的时候,会出现如下现象:
现象请允许我用别人的截图:
产生这样的原因是NGUI 的UISprite.cs中的Tiled算法方式。
如下图,在onFill中,计算了sprite的UV,查看源代码,可以知道,在NGUIMath.ConvertToTexCoords中,转换UV坐标,转换为了0到1之间的数。
接着,在OnTiled中,进行了平铺的计算。在size的计算中用到了mInnerUV.with(是一个0到1之间的小数)乘以了tex.width(atlas,是一个256 512 1024 2048等的偶数宽度)。原因就在这里,任何一个0到1之间的一位小数乘以一个偶数,得到的值是一个偶整数。所以,哪怕你的原图是13*13,在tiled之后,将以14*14的方式拉伸,所以会补一条空像素。
(这里解释的有问题。直觉感觉原因出在这里。等空闲的时候仔细研究。)
解决方法:给sprite设置1像素的边,拉伸的时候,是不计算边的