效果图跟用clippingNode实现的那次差不多
直接上代码
1 | bool HelloWorld::init() { |
这次代码比上次的要简单一些,我们先加上背景图,然后再加上一个DrawNode来实现擦除,这个DrawNode设置BlendFunc为BlendFunc::DISABLE,也就是在它与背景混合的地方,只显示自己不显示背景,而他自己又是把运动轨迹绘制成透明的线段,所以就产生了背景图被擦除的效果。如果我们需要限制在局部范围内,只要处理好触摸区域或者添加到容器内即可
然后解释下blendFunc,它是用来处理颜色混合的,我们要将一个图片渲染到屏幕上时,需要将它的颜色(RGBA)与屏幕上已有的颜色混合,我们将要被渲染上去的称为源(src),屏幕上已有的称为目标(dst),最终颜色显示是它们和各自的因子相乘。如下所示
1 | 源颜色 Rs Gs Bs As |
cocos内置了一些值
1 | GL_ZERO //全部不用 (0,0,0,0) |
这样就不难理解本例中我们使用的BlendFunc::DISABLE了,它意味着混合的时候,不取目标颜色,只显示源颜色。想一下sprite默认应该使用哪种呢?这取决于图片是否已经预乘了alpha,如果是则使用ALPHA_PREMULTIPLIED,否则使用ALPHA_NON_PREMULTIPLIED,很好理解。
Ursprünglicher Link: http://yangguang1029.github.io/2016/12/01/cocos-blendFunc/
Copyright-Erklärung: 转载请注明出处.