cc.Mask 在native环境非常卡,web环境也很卡

在做一个拖地项目,按下拖把会有一个拖地的痕迹。
伪代码如下
update() {
if(touching) {
var stencil = mask_node.getComponent(cc.Mask)._graphics;
stencil.circle(0, 0, 100);
stencil.fillColor = new cc.Color(255, 255, 255, 255);
stencil.fill();
if (!CC_JSB) {
cc.renderer.childrenOrderDirty = true;
}
}
}

这种方式掉桢严重 大概降低15-20桢之间,有什么解决思路吗?

mask写在update里就够呛了吧

没办法呢,业务需要。按住拖把就必须用mask制作出拖地的痕迹

为什么要写在update中,应该是可以放到touchMove里面吧,可以参考下https://forum.cocos.com/t/ccc/51528/95

两个地方性能估计差不多的吧

touchmove还不是每一桢调用,效果一样的

Graphics 内容太多了,顶点数量多,填充率高,还用作 stencil 的话,整体性能肯定差,比较好的做法是取擦除路径上的关健点,连接起来,关键点不要一直取,达到一定距离再取,如果要平滑一些,可以检测移动距离,超过 minDistance 就加一个临时点,当超过 keyDistance,就删除中间的临时点,增加一个关键点,和 last key point 连接起来

2赞

按照你的方法确实优化了一些,但是目前我单纯添加两个全屏mask,没做其他任何操作无任何代码,贞率掉到40-50之间,有办法优化吗?



touchmove是每帧调用吗,我印象里好像不是呢