最近在使用 cc.Mask 制作擦除的效果,这个论坛有很多分享,实现起来也比较容易。
我现在的做法是,添加一个 cc.Node + cc.Mask,设置类型为 RECT + inverted。然后子节点挂一个单色的Node。
然后直接使用 mask._graphics 画图形,比如画个圆,就有效果了
但是我现在想要圆的边缘有点模糊渐变,于是想要使用一个自定义 shader 来实现。
但是下面的代码会报错:
var material = new cc.Material();
material.effectAsset = this._myEffectAsset; // 我自己的已经加载好的 effect
material.name = "test";
mask._graphics.setMaterial(0, material);
报错:
然后我又试了下:
var material = new cc.Material();
material.effectAsset = this._myEffectAsset; // 我自己的已经加载好的 effect
material.name = "test";
mask.setMaterial(0, material);
这样运行不会报错了,但是也不再会有画出圆的效果了。
我一开始以为我的 shader 有问题,然后我看了下 mask 的源码,发现他用的是 builtin-2d-sprite 这个 shader,于是我就把这个文件的内容完全复制到了我的 shader 里,结果运行起来还是看不到任何的效果。
估计是还有什么地方我做的不对,希望有大佬可以指点一下 ~~~


