var bgWhite = new cc.LayerColor(cc.color(255, 255, 255, 255), 1136, 640); // 白色纯色层 打算被遮罩
bgWhite.x = 0;
bgWhite.y = 0;
this.addChild(bgWhite, 0);
---------------------------------------------------------------------------------------------
var Stencil = new cc.Sprite("photoPath"); // 一张png格式的图片,png图片有两个部分:空白和非空白 非空白也就是图案内容完全不用关心 photpPath是.png图片的路径
var clipping_layer = new cc.ClippingNode(); // 创建一个遮罩层节点 和普通的层一样会对外显示自己 显示方式比较特别,看下面clipping_layer.attr({ // 遮罩层节点参数
stencil: Stencil, // 根据 Stencil的 空白和 非空白把clipping_layer及其上的子层切割成两个部分 A 和 B
anchorX:0,
anchorY:0,
alphaThreshold:0.5,
});
clipping_layer.setContentSize(cc.size(1136, 640));
clipping_layer.setPosition(cc.winSize.width / 2, cc.winSize.height / 2);
clipping_layer.setInverted(false); // 重点:显示方式
// true A区域显示clipping_layer的child部分,B区域透明,显示clipping_layer下面层的
// false A区域透明,显示clipping_layer下面层的,B区域显示clipping_layer的child部分
bgBlue.setPosition(-cc.winSize.width / 2, -cc.winSize.height / 2);
clipping_layer.addChild(bgBlue, 1); // clipping_layer上面加上浅蓝纯色层
// 最终效果:
假如Stencil所使用的.png图片是一个中间有一个的圆饼的图片,周围空白
当clipping_layer.setInverted(true)的时候 结果 周围空白显示clipping_layer的bgBlue,圆饼部分显示clipping_layer下面的bgWhite 也就是外蓝内白
当clipping_layer.setInverted(false)的时候 结果 周围空白显示clipping_layer的bgWhite,圆饼部分显示clipping_layer下面的bgBlue 也就是外白内蓝
而Stencil所使用的.png图片只负责切,是不会有任何对外显示的
// 总结:
使用遮罩至少两个层才有意义
一个被遮,一个去遮
被遮的放下面,去遮放上面
被遮的是个普通层,去遮的有一个切割图和一个背景层(不设置就是透明的也可以是多层合起来的层)和一个开关(true或false)
切割图根据png图片的空白与非空白把普通层切割成(普通层A区域与普通层B区域)
切割图根据png图片的空白与非空白把背景层切割成(背景层A区域与背景层B区域)
A区域+B区域组成一张完整图
开关true时,显示背景层A区域与普通层B区域
开关false时,显示普通层A区域与背景层B区域
一共两张图,一共4个区域,交叉组合