2013-8-29更新:这两天改变了优化图片的方法,做出来在游戏当中又有缝隙(PS:苹果真机上有,win32以及苹果模拟器都没有,好神奇),已经使用下面的 #define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 1
但是缝隙比以前没加 #define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 1小很多,后来搜索CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
#if CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
left = (2*rect.origin.x+1)/(2*atlasWidth);
right = left + (rect.size.width*2-2)/(2*atlasWidth);
top = (2*rect.origin.y+1)/(2*atlasHeight);
bottom = top + (rect.size.height*2-2)/(2*atlasHeight);
#else
left = rect.origin.x/atlasWidth;
right = (rect.origin.x + rect.size.width) / atlasWidth;
top = rect.origin.y/atlasHeight;
bottom = (rect.origin.y + rect.size.height) / atlasHeight;
#endif // ! CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
找到上面的代码
我把他范围改了,1改成1.5f,2改成3
#if CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
left = (2*rect.origin.x+1.5f)/(2*atlasWidth);
right = left + (rect.size.width*2-3)/(2*atlasWidth);
top = (2*rect.origin.y+1.5f)/(2*atlasHeight);
bottom = top + (rect.size.height*2-3)/(2*atlasHeight);
#else
left = rect.origin.x/atlasWidth;
right = (rect.origin.x + rect.size.width) / atlasWidth;
top = rect.origin.y/atlasHeight;
bottom = (rect.origin.y + rect.size.height) / atlasHeight;
#endif // ! CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
这样就好了,CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL在很多地方有调用,我只改了CCSprite那里的2处调用,其他的地方我暂时没有发现这样的问题~
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
更新:下面的方法虽然解决了问题,但是发现不开启抗锯齿的话,适配到需要缩放的机器上时,图片质量会变渣~
网上搜索了下,还真有办法解决:
修改 ccConfig.h
PS:注意这样改完需要重新编译cocos2d-x
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最近由于工作需要,需要创建两个CCSprite(使用同一张贴图的不同部分),然后将他们拼接起来~
刚开始没有什么问题,后来对图片进行了优化之后,发现拼接起来的两个CCSprite中间有一条缝隙
找了很久都没有发现问题,后来想可能是openGL的机制问题,问了下老大,老大说可能是openGL开了抗锯齿
我想了一下,认为可能性很大,网上找了关闭抗锯齿的方法试了一下,果然是这个原因。
后来分析了下,刚开始没有问题,应该是贴图没有优化,两个CCSprite在图片上对应的切片块在图片上就是无缝拼接在一起的,
所以抗锯齿没有起作用;而优化过之后,两个CCSprite在图片上对应的切片分开了,而他们的边缘是一些透明色,所以抗锯齿
效果进行了处理,导致了边缘虚化,形成了一条缝隙。
对贴图使用下面方法可以关闭抗锯齿
setAliasTexParameters();//不抗锯齿
setAntiAliasTexParameters(); //抗锯齿
可见cocos2d-x默认对贴图是抗锯齿的。
网上说CCTMXTiledMap默认是不抗锯齿的,就是采用的是setAliasTexParameters,这个没有试验过~