cocos2d-x中使用CCSprite拼接有缝隙

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 

             #define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 0 
             改为
            #define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 1
            大致看了下解释,我理解的意思就这个切片的边缘很小的一个范围不做抗锯齿处理
            这样就不需要关闭抗锯齿了~

           PS:注意这样改完需要重新编译cocos2d-x大笑

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

最近由于工作需要,需要创建两个CCSprite(使用同一张贴图的不同部分),然后将他们拼接起来~

刚开始没有什么问题,后来对图片进行了优化之后,发现拼接起来的两个CCSprite中间有一条缝隙

找了很久都没有发现问题,后来想可能是openGL的机制问题,问了下老大,老大说可能是openGL开了抗锯齿

我想了一下,认为可能性很大,网上找了关闭抗锯齿的方法试了一下,果然是这个原因。

后来分析了下,刚开始没有问题,应该是贴图没有优化,两个CCSprite在图片上对应的切片块在图片上就是无缝拼接在一起的,

所以抗锯齿没有起作用;而优化过之后,两个CCSprite在图片上对应的切片分开了,而他们的边缘是一些透明色,所以抗锯齿

效果进行了处理,导致了边缘虚化,形成了一条缝隙。

对贴图使用下面方法可以关闭抗锯齿

setAliasTexParameters();//不抗锯齿

 

setAntiAliasTexParameters();  //抗锯齿

可见cocos2d-x默认对贴图是抗锯齿的。

 

网上说CCTMXTiledMap默认是不抗锯齿的,就是采用的是setAliasTexParameters,这个没有试验过~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值